簡體   English   中英

如何在 MySQLI 中使用准備好的語句?

[英]How to use prepared statement with MySQLI?

$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的情況where clause得到了正確的結果

對 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();
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM