2013-04-01 36 views
8

我试图使下面的代码工作,但我无法达到​​行。如何在PHP中运行bind_param()语句?

$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bind_param('i', 2); 
echo 'Ready to execute<br>' 
if ($stmt->execute()){ 
    echo 'Executing..'; 
    } 
} else { 
    echo 'Error executing!'; 
} 
mysqli_close($mysqli); 

,我得到的输出是:

Connected 
Prepared and binding parameters 

所以问题应该第5行,但检查manual of bind_param()我无法找到任何语法错误在那里。

+3

为什么不回显收到的错误以帮助调试?我认为回应'$ stmt-> error'会让你感觉到mysql正在抱怨的确切错误。 – Todd

+0

我更新了我的问题,因为现在我甚至无法在'bind_param()'之后运行以下行! @Todd这很有用,重要的是要记住。 – Lucio

回答

11

当绑定需要传递被用作基准的可变参数:

$var = 1; 

$stmt->bind_param('i', $var); 

参见手册:http://php.net/manual/en/mysqli-stmt.bind-param.php

注意$var实际上并不必须被定义为结合它。以下是完全合法:

$stmt->bind_param('i', $var); 

foreach ($array as $element) 
{ 

    $var = $element['foo']; 

    $stmt->execute(); 

} 
+2

+1,令人惊叹的是,你有没有参考这个事实?我从来没有学过:) – 2013-04-01 17:40:00

+0

是的,将链接添加到我的答案。 – MichaelRushton

+0

Tnx !!!我有3小时的相同问题.... –

-6

你的实际问题不是在第5行,而是在1号线
您正在尝试使用不可用的驱动程序。
虽然PDO确实如你所愿。

$sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?" 
$stm = $this->pdo->prepare($sql); 
$stm->execute(array(2)); 
return $stm->fetch(); 

后通过了所有年以来这个答案已经写,一个新的PHP功能出现,被称为“参数拆包”。所以,既然5.6版本,你可以通过一个值bind_param:

$stmt->bind_param('i', ...[2]); 

但你仍然有让您的数据备份出来一份声明:)

+0

如果它不可用,那么为什么有软件在那里建立,按预期工作? –

+0

因为人们直接使用它作为旧的mysql分机,**保留所有的缺点和不安全感** –

+0

缺点和不安全感,我同意。 “不可用”是完全不同的。 –

-1

这里的麻烦,这只是一个简单的解释
声明要绑定的变量

$var="email"; 
$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 

$var="email"; 
$stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bindparam(1,$var);