【问题标题】:Fatal error Invalid parameter number: mixed named and positional parameters致命错误无效的参数号:混合命名参数和位置参数
【发布时间】:2013-07-31 04:51:02
【问题描述】:

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

【问题讨论】:

  • “混合命名参数和位置参数”的错误消息为您说明了。不要在一个查询中同时使用命名 (:username) 和位置 (?) 参数。
  • ? 放在查询中的两个位置并使用$stmt-&gt;bindParam(1, $username);$stmt-&gt;bindParam(2, $_GET['id']); 有什么问题

标签: php pdo


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-05
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2016-07-26
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多