首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Php mysqi bind_param变量数量与预准备语句中的参数数量不匹配

Php mysqi bind_param变量数量与预准备语句中的参数数量不匹配
EN

Stack Overflow用户
提问于 2013-02-09 04:45:43
回答 1查看 37.9K关注 0票数 35

这肯定是个新手的错误,但我没看出来。下面是我的代码中的一段代码:

代码语言:javascript
复制
$mysqli = mysqli_connect($dbCredentials['hostname'], 
    $dbCredentials['username'], $dbCredentials['password'], 
    $dbCredentials['database']);

if ($mysqli->connect_error) {
    throw new exception( 'Connect Error (' . $mysqli->connect_errno . ') '
    . $mysqli->connect_error);
}

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

$stmt->bind_param('is', $year, $make);

$stmt->execute();

当我回显$year和$make的值时,我看到的是值,但当我运行此脚本时,我得到一个空值,并且以下警告出现在我的日志文件中:

代码语言:javascript
复制
PHP Warning:  mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

在本例中,year在数据库中的类型为int(10),我尝试传递一个被强制转换为int的副本,而make是一个使用utf8_unicode_ci编码的varchar(20)。我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-09 04:58:28

您的预准备语句是错误的,应该是:

代码语言:javascript
复制
$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types WHERE year = ? AND make = ? ORDER by model");

单引号就是这么回事?作为值,而不是标记。它将已经是一个字符串,因为您使用bind_param('is'进行了强制转换

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14781051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档