当我尝试将$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):第7行/home/www/test.php中抛出PDOStatement-> execute()#1 {main}
$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");
}
答案 0 :(得分:1)
正如错误所示,您试图在这两个语句中绑定参数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();