【发布时间】:2013-07-31 04:51:02
【问题描述】:
当我尝试将 $stmt->bindParam(':username', $username, PDO::PARAM_STR); 添加到我的脚本时遇到致命错误。下面只是我的脚本的一部分。我想做的是让它使用会话用户名和id。如果我取出username = :username 和$stmt->bindParam(':username', $username, PDO::PARAM_STR); 就可以了。
我遇到的致命错误:
致命错误:未捕获的异常“PDOException”和消息“SQLSTATE [HY093]:无效的参数号:混合命名和位置参数”在/home/www/test.php:7 堆栈跟踪:#0 /home/www/ test.php(7): PDOStatement->execute() #1 {main} 在第 7 行的 /home/www/test.php 中抛出
$action = isset($_GET['action']) ? $_GET['action']: "";
if($action=='delete'){
$username = $_SESSION['user']['username'];<<<<<<<<I ADD THIS LINE
$query = "DELETE FROM hostingpackage WHERE username = :username And id = ?";
$stmt = $db->prepare($query);
$stmt->bindParam(1, $_GET['id']);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);<<<<I ADD THIS LINE
$result = $stmt->execute();
header("Location: test.php");
die("Redirecting to test.php");
}
【问题讨论】:
-
“混合命名参数和位置参数”的错误消息为您说明了。不要在一个查询中同时使用命名 (
:username) 和位置 (?) 参数。 -
将
?放在查询中的两个位置并使用$stmt->bindParam(1, $username);$stmt->bindParam(2, $_GET['id']);有什么问题