如何在 MySQLI 中使用准备好的语句?
Posted
技术标签:
【中文标题】如何在 MySQLI 中使用准备好的语句?【英文标题】:How to use prepared statement with MySQLI? 【发布时间】:2010-05-18 19:26:25 【问题描述】:$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->query('PREPARE mid FROM "SELECT name FROM test_user WHERE id = ?"');
// working code start
//$res = $mysqli->query('PREPARE mid FROM "SELECT name FROM test_user" ');
//$res = $mysqli->query( 'EXECUTE mid;') or die(mysqli_error($mysqli));
// working code end..
$res = $mysqli->query( 'EXECUTE mid 1;') or die(mysqli_error($mysqli));
while($resu = $res->fetch_object())
echo '<br>' .$resu->name;
错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“1”附近使用正确的语法
我的php版本是PHP Version 5.3.0
和mysql
mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
没有使用where clause
,我得到了正确的结果
【问题讨论】:
【参考方案1】:对 SELECT 查询使用准备函数:
http://php.net/manual/en/mysqli.prepare.php
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?"))
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
/* close statement */
$stmt->close();
【讨论】:
我怎么能多次调用这个? 这里的想法是您准备查询、绑定值、执行准备好的查询、绑定其他值、使用这些新值再次执行准备好的查询等。所以只需再次调用execute()
.更多信息:php.net/manual/en/mysqli-stmt.execute.php【参考方案2】:
http://dev.mysql.com/doc/refman/5.1/en/execute.html
您需要在 EXECUTE 语句中有一个 using 子句。所以你可以这样做:
$mysqli = new mysqli("localhost", "root", "", "test");
$mysqli->query('PREPARE mid FROM "SELECT name FROM test_user WHERE id = ?"');
$mysqli->query('SET @var1 = 1;');
$res = $mysqli->query( 'EXECUTE mid USING @var1;') or die(mysqli_error($mysqli));
【讨论】:
以上是关于如何在 MySQLI 中使用准备好的语句?的主要内容,如果未能解决你的问题,请参考以下文章