当我试图将$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/ww/test.php(7):PDOStatement->execute()#1{main}在/home/window/test.php的第7行中抛出
$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");
}
因为错误表明您正试图在这两个语句中绑定参数1
和:username
。我想混淆的地方在于散列表示法和?
的使用。
最好不要混合这些符号,在整个过程中使用?
或像:username
一样使用散列符号。
请尝试:
$query = "DELETE FROM hostingpackage WHERE username = :username And id = :id";
$stmt->bindParam(':username', $username, PDO::PARAM_STR);<<<<I ADD THIS LINE
$stmt->bindParam(':id', $_GET['id']);
$result = $stmt->execute();
或者这个:
$query = "DELETE FROM hostingpackage WHERE username = ? And id = ?";
$stmt->bindParam(1, $username, PDO::PARAM_STR);<<<<I ADD THIS LINE
$stmt->bindParam(2, $_GET['id']);
$result = $stmt->execute();