PDO更新数据库

时间:2014-04-09 16:16:11

标签: php pdo

您好我是PHP和PDO的新手。我试图更新我的数据库中的记录取决于我在会话文件中声明的login_id变量(我的会话工作正常)。

我有更新脚本的以下代码。它使用execute语句抛出错误。

“未捕获异常'PDOException',消息'SQLSTATE [HY093]:无效参数号:绑定变量数与令牌数不匹配'/home/atlismap/public_html/bio.php:40堆栈跟踪:#0 /home/atlismap/public_html/bio.php(40):PDOStatement-> execute()#1 {main}“

有人知道为什么吗?

require_once 'check.php';
$sql = "UPDATE users SET username = :username, 
        full_name = :full_name, 
        country = :country,   
        bio = :bio  
        WHERE id = : $log_user_id";
$stmt = $dtb->prepare($sql);                                  
$stmt->bindParam(':full_name', $_POST['full_name'], PDO::PARAM_STR);          
$stmt->bindParam(':country', $_POST['country'], PDO::PARAM_STR);
$stmt->bindParam(':bio', $_POST['bio'], PDO::PARAM_STR);   
$stmt->execute(); 

2 个答案:

答案 0 :(得分:3)

你必须像其他参数一样设置':username':

$stmt->bindParam(':username', $_POST['username'], PDO::PARAM_STR); 

并修复:

$sql = "UPDATE users SET
…
WHERE id = : $log_user_id";

由:

$sql = "UPDATE users SET 
…
WHERE id = :id";
$stmt->bindParam(':id', $log_user_id, PDO::PARAM_INT); 

PDO允许使用“:param_name”绑定param,但是您为id使用了一个变量,因此您可以使用param“:id”并绑定它,或者使用“WHERE id = $ variable。

答案 1 :(得分:2)

我看到了两个问题。

您没有绑定到:username的变量,而WHERE id = : $log_user_id";存在问题

你应该删除:并且只使用'$log_user_id'(如果这是安全的)或使用:log_user_id并在下面绑定它。

另一种方法是在执行中绑定它们,我发现它很简单,编写的代码更少:

$sql = "UPDATE users SET username = ?, 
        full_name = ?, 
        country = ?,   
        bio = ?  
        WHERE id = ?";
$stmt = $dtb->prepare($sql);                                   
$stmt->execute(array($_POST['username'], $_POST['full_name'], $_POST['country'], $_POST['bio'], $log_user_id));

只需按照您在查询中放置?的顺序绑定它们