2011-06-08 54 views
0

我想了解如何multi queries在mysqli中工作。但我承認這並不容易理解。Mysqli - 多個查詢與準備的陳述

基本上我怎麼能在多查詢中做這些查詢?該頁面不討論多重查詢中的預備語句。

($sql = $db -> prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)")); 
$sql -> bind_param('sss', $name, $email, $hash); 
$sql -> execute(); 

($sq = $db -> prepare("INSERT INTO activation_link_password_reset (activation_link) VALUES (?)")); 
$sq -> bind_param('s', $linkHash); 
$sq -> execute(); 

感謝

回答

2

不能使用準備好的語句那裏,增速也是可以忽略不計,所以去的更容易調試單獨的查詢。

如果你真的想這樣做,在1調用預處理語句,創建一個PROCEDURE(甚至更難以調試...),並準備CALL(:param1,:param2);

+0

速度是最低的。我的preocupation是SQL注入。 :) – anvd 2011-06-08 17:55:29

0

我其實早在幾天前就知道了。遷移到MySQLi並不是一件容易的事情,但病態發展並向您顯示準備好的語句的查詢循環。這裏

$db = new mysqli(...) 

$statement = $db->prepare('SELECT count(*) as [hitchhikers] FROM `T_Users` WHERE `id` > ? AND `signin` like ?'); 
$statement->bind_param("ss", 42, '%adams'); 

if ($statement->execute()) 
{ 
    $statement->store_result(); 
    $statement->bind_result($hitchhikers); 
    $statement->fetch(); 

    // do something with hitchhikers here 
} 
else 
{ 
    // there was a problem with the execution, check $db->error 
} 

$statement->close(); 
$db->next_result(); 

一切通過更換工作原理類似於非面向對象的格式 - > _並通過返回值到新的功能,但在這裏,這個過程是相當多的,你應該是什麼與每個那些做聲明。您也可以使用mysqli包裝類將其抽象出來。

$db->next_result()調用之後,您可以再次重複該過程。這一變化與MySQLi連接和結果的處理方式有關。當然,您可以完全通過切換回mysql_查詢和資源來避免此問題。

專門針對multi_query,可以用一個分號將查詢分隔成單個字符串。您鏈接的示例顯示瞭如何處理結果。

MySQLi Book @PHP.net

+0

你剛剛使用了一個查詢,而不是我假裝的兩個。 – anvd 2011-06-08 17:44:00

+3

現在,用多查詢? – Wrikken 2011-06-08 17:44:22

+0

你想要一個具體的例子嗎?一個看起來不像是鏈接的那個? – 2011-06-08 17:46:34