致命错误无效的参数编号:混合了命名参数和位置参数


Fatal error Invalid parameter number: mixed named and positional parameters

当我试图将$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();