1

当我尝试添加$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");
       }
4

1 回答 1

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();
于 2013-07-31T05:16:59.633 回答