首页  >  问答  >  正文

预处理语句中参数数量与bind_param绑定的变量数量不一致

<p>这是我的代码片段:</p> <pre class="brush:php;toolbar:false;">$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = '?' ORDER by model"); $stmt->bind_param('is', $year, $make); $stmt->execute();</pre> <p>当我输出$year和$make的值时,我能看到这些值,但是当我运行这个脚本时,我得到一个空值,并且我的日志文件中出现以下警告:</p> <blockquote> <p>PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement</p> </blockquote> <p>在这种情况下,year在数据库中的类型是int(10),我已经尝试将其转换为int类型进行传递,而make是一个带有utf8_unicode_ci编码的varchar(20)。我有什么遗漏吗?</p>
P粉578343994P粉578343994396 天前399

全部回复(1)我来回复

  • P粉513316221

    P粉5133162212023-08-23 14:52:19

    您的预处理语句是错误的,应该是:

    $stmt = $mysqli->prepare("
        SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model
    ");
    $stmt->bind_param('is', $year, $make);
    $stmt->execute();

    当您准备一个语句时,您必须用问号而不是引号替换每个变量。在引号内的问号将不会被识别为占位符。

    问号的数量必须等于bind_param()中的变量数量

    回复
    0
  • 取消回复