无法使用 PHP 和 PDO 更新表

Posted

技术标签:

【中文标题】无法使用 PHP 和 PDO 更新表【英文标题】:Cannot update table with PHP and PDO 【发布时间】:2018-07-09 11:21:07 【问题描述】:

我有 2 张桌子,useruser_role

user = id, name, pass
user_role= user_role_id, user_role_name

我正在尝试使用以下查询更新表:

UPDATE users SET nom = ?, user_role_id = ?, pass = ? WHERE id = ?

我的 php 代码:

$nom = $_POST['nom']; $roles = $_POST['roles'];$pass = $_POST['pass'];  
$valid = true; if (empty($nom))  $nameError = 'Entrée un nom'; $valid = 
false; 
else if (!preg_match("/^[a-zA-Z ]*$/",$nom)) $nameError = "que des letttres 
sans espace";  
if(empty($pass)) $passError ='entrée un mot de pass'; $valid= false; 
else if (!preg_match('$S*(?=S8,)(?=S*[a-z])(?=S*[A-Z])(?=S*[d])(?=S* 
[W])S*$', $pass)) 
if (!isset($roles))  $rolesError = 'Selectionner un roles'; $valid = 
false;  
if ($valid)  $pdo = Database::connect(); $pdo- 
>setAttribute(PDO::ATTR_ERRMODE, 
PDO::ERRMODE_EXCEPTION);

 $sql = "UPDATE users 
 SET nom = ?, user_role_id = ?, pass = ? WHERE id = ?";

            $q = $pdo->prepare($sql);
            $q->execute(array($id,$nom, $roles,$pass));
            Database::disconnect();

我没有错误,但表格没有更新

【问题讨论】:

用您正在使用的数据库标记您的问题。 并显示你的 PHP 代码 你也有参数,否则它不会工作 【参考方案1】:

是否定义了“nom”列?

我认为“nom”实际上是用户的“name”列,我错了吗?

数组中变量的顺序也是错误的。代码应该如下

$sql = "UPDATE users  SET name = ?, user_role_id = ?, pass = ? WHERE id = ?";
$q = $pdo->prepare($sql);
$q->execute(array($nom, $roles,$pass,$id));
Database::disconnect();

【讨论】:

【参考方案2】:

我有这样的重写查询。

UPDATE users SET nom =@nom , user_role_id = @user_role_id, pass = @pass WHERE id = @id

添加输入以及值来自文本框、单选按钮等的位置。

【讨论】:

【参考方案3】:

如何更新不在正在更新的表中的列?我假设您使用的是 mysql。如果是这样,您可以同时更新多个表:

UPDATE users u JOIN
       user_roles ur
       ON ur.user = u.id
    SET u.nom = ?,
        ur.user_role_id = ?,
        u.pass = ?
    WHERE u.id = ?

【讨论】:

以上是关于无法使用 PHP 和 PDO 更新表的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 php 的 PDO 将数据插入数据库

使用 PHP / PDO 更新表迭代数组 [重复]

使用数组的 PDO 更新表

更新选择列表而不刷新 [PDO/PHP/AJAX]

我正在尝试将 PDO 和 OOP 结合起来,但无法正常工作

无法使用 PHP PDO 获取 SQL Server 打印消息