2013-02-27 29 views
0

我第一次嘗試使用mysqli,並且需要沿着腳本做一些查詢。這是基本的流程:爲什麼我不能再次重新使用mysqli-> realquery而不再重新連接?

$mysqli = new mysqli("localhost", "root", "", "kiosk"); 
if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; } 

$mysqli->real_query("SELECT * FROM screens WHERE name = '" . $screen_code . "'"); 
$res = $mysqli->use_result(); 
$row = $res->fetch_assoc(); 

print_r(_content($row['wcode'])); 
die(); 

function _content($wcode) { 
    global $mysqli; 
    $mysqli->real_query("SELECT * FROM content WHERE wcode= '" . $wcode. "' ORDER BY id ASC"); 
    $res = $mysqli->use_result(); 
} 

MySQL查詢是正確的,已經直接測試在MySQL中,如果_content我reconect到數據庫一切正常,但我不希望我要查詢每次都連接。

+1

他號召real_query兩次,所以標題是有道理的,代碼是相關的。我很好奇當他現在運行代碼時錯誤信息是什麼。 – Scott 2013-02-27 13:25:51

+0

沒有錯誤@Scott只是空白的輸出 – DomingoSL 2013-02-27 13:27:26

+0

你有沒有錯誤處理你的「真實」代碼中的mysqli函數?例如。你檢查mysql :: real_query()的返回值,甚至可能在錯誤的情況下打印錯誤代碼/消息嗎? – VolkerK 2013-02-27 13:43:20

回答

2

使用use_result()時,在使用相同連接發出新命令/語句之前,必須格外小心地檢索完整的結果集。 store_result()爲您處理此過程。 請參閱https://dev.mysql.com/doc/refman/4.1/en/mysql-use-result.html

使用mysql_use_result()時,必須執行mysql_fetch_row(),直到返回NULL值,否則,未提取的行將作爲下一個查詢的結果集的一部分返回。如果您忘記這麼做,C API會給出錯誤 Commands out of sync; you can't run this command now

對於php/mysql API也是如此。

您可以通過JOIN

SELECT 
    c.foo, c.bar, c.baz 
FROM 
    screens as s 
LEFT JOIN 
    content as c 
ON 
    s.wcode=c.wcode 
WHERE 
    s.name = 'something' 
ORDER BY 
    c.id 

你兩個查詢合併爲一個,從而避免這一切麻煩......

+0

謝謝!這是問題,令人難以置信,我在我的問題上得到了反對票,只是因爲人們不明白這是從mysql到mysqli的實際遷移問題。再次感謝! – DomingoSL 2013-02-27 13:53:31

1

我是MySQLi的新手,剛開始使用它。 嘗試使用query()而不是real_query()它適用於我。

+0

我不確定,但是我想你需要在'print_r()'之前放置函數,因爲在調用它之前需要定義它。 – 2013-02-27 13:46:53

相關問題