2013-02-08 112 views
19

这必须是一个新手的错误,但我没有看到它。下面是我的代码片段:Php mysqi bind_param变量数量与准备语句中的参数数量不匹配

$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(); 

当我回声出值$一年$作,我看到了价值,但是当我运行该脚本,我得到一个空值,而下面的警告出现在我的日志文件:

PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement 

在这种情况下,今年是在int型数据库(10),和我试图通过已被强制转换为int类型的副本,并是一个varchar( 20)用utf8_unicode_ci编码。我错过了什么吗?

+0

你试图对**做什么**是在bind_param方法中? – 2013-02-08 20:48:09

+0

它是$ types字符串。 “是”应该表示第一个参数是一个整数,第二个参数是一个字符串。 – TMorgan 2013-02-08 20:58:59

回答

34

你准备的说法是错误的,它应该是:

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

单引号所做的?成为价值而不是标记。它将已经是一个字符串,因为你正在使用bind_param('is'

+0

谢谢。就是这样。 – TMorgan 2013-02-08 21:04:57

+1

如果它解决了您的问题,请不要忘记标记为答案。 – NoLifeKing 2014-05-09 06:04:16