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

时间:2013-07-31 04:51:03

标签: php pdo

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

1 个答案:

答案 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();
相关问题