2013-01-14 69 views
2

所以根据一个建议,我试图包括准备好的语句。变量数量不匹配参数数量 - 是的,他们做

但PHP不接受我的代码。

$stmt = $link->prepare('SELECT COUNT(*) FROM `table` WHERE `company` = CONVERT(_utf8 \'?\' USING latin1) COLLATE latin1_german1_ci AND `password` = CONVERT(_utf8 \'?\' USING latin1) COLLATE latin1_german1_ci'); 
$stmt->bind_Param('ss', $firmaP, $kennwP); 
$firmaP = utf8_encode($_POST['company']); 
$kennwP = utf8_encode($_POST['password']); 
if ($stmt->execute()) { 
    if($row = $stmt->fetch()) { 
     echo "OK"; 
    } 
    else 
    { 
     echo "NO"; 
    } 
} 

我得到

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

而我在查询的两个questionmarks和bind_Param两个变量。

如何解决这个问题?

编辑:替换\'?\'?导致

Fatal error: Call to a member function bind_param() on a non-object

+3

你不使用绑定参数时,引用字符串参数在查询;你留下绑定语句来为你做这件事 –

+1

你不要引用参数。数据库引擎会这样做。 –

+0

当你将它绑定到语句时,'$ firmaP'和'$ kennwP'是否有值? – datasage

回答

7

不要引用您的? S作为如下:

$stmt = $link->prepare('SELECT COUNT(*) FROM `table` WHERE `company` = CONVERT(_utf8 ? USING latin1) COLLATE latin1_german1_ci AND `password` = CONVERT(_utf8 ? USING latin1) COLLATE latin1_german1_ci'); 
$firmaP = utf8_encode($_POST['company']); 
$kennwP = utf8_encode($_POST['password']); 
$stmt->bind_Param('ss', $firmaP, $kennwP); 
if ($stmt->execute()) { 
    if($row = $stmt->fetch()) { 
     echo "OK"; 
    } 
    else 
    { 
     echo "NO"; 
    } 
} 
+0

致命错误结果:调用非对象 –

+1

+1上的成员函数bind_param()。参数化查询的重点在于您不必引用字段。 – SDC

+0

@SDC我被告知这是安全。 –

相关问题