2010-05-18 131 views
2

$ mysqli = new mysqli(「localhost」,「root」,「」,「test」); $ mysqli-> query('PREPARE mid FROM「SELECT name FROM test_user WHERE id =?」'); //工作代碼開始 // $ res = $ mysqli-> query('PREPARE mid FROM FROM SELECT name FROM test_user''); // $ res = $ mysqli-> query('EXECUTE mid;')or die(mysqli_error($ mysqli)); //工作代碼結束.. $ res = $ mysqli-> query('EXECUTE mid 1;')or die(mysqli_error($ mysqli));mysqli準備聲明錯誤?

while($resu = $res->fetch_object()) { 
    echo '<br>' .$resu->name; 
} 

錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1 

我的php版本是PHP Version 5.3.0和MySQL

mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 

我使用where clause

回答

2

使用了該準備的功能得到了與出正確的結果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(); 
}
+0

我該怎麼稱呼這個多次? – Linto 2010-05-18 20:25:39

+0

這裏的想法是,您準備查詢,綁定值,執行準備好的查詢,綁定其他值,再次使用這些新值執行準備好的查詢等。因此,只需再次調用execute()即可。更多信息:http://www.php.net/manual/en/mysqli-stmt.execute.php – Alec 2010-05-18 20:33:38

0

http://dev.mysql.com/doc/refman/5.1/en/execute.html

您必須在EXECUTE語句使用條款。所以你可以做這樣的事情:

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