您好我是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();
答案 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));
只需按照您在查询中放置?的顺序绑定它们