2013-11-03 49 views
0

我正在嘗試在準備好的語句中運行準備好的語句,但沒有成功。這裏是我的代碼:Mysqli Prepare不在其他準備好的語句中工作

if ($stmt = $mysqli->prepare("SELECT author_id FROM posts")) { 
$stmt->execute(); 
$stmt->bind_result($author_id); 
    while ($stmt->fetch()) { 
     if ($stmt2 = $mysqli->prepare("SELECT username FROM users WHERE id=? LIMIT 1")) { 
      $stmt2->bind_param("s", $author_id); 
      $stmt2->execute(); 
      $stmt2->bind_result($username); 
      $stmt2->fetch(); 
      $stmt2->close(); 

      //showing username 
      echo $username; 
     } 
    } 
    $stmt->close(); 
} 

我從一個表中獲取author id,然後從author id我試圖從另一個表中獲取作者的名字。
您可以告訴我任何方式來做到這一點或任何修改,在這個腳本可以完成。

+0

http://stackoverflow.com/questions/19613630/query-using-previous-querys-result/19614121#19614121 – Uours

回答

-2

對內循環使用另一個mysqli對象。

$mysqli = new mysqli(host, user, password, dbname); 
$mysqli2 = new mysqli(host, user, password, dbname); 

if ($stmt = $mysqli->prepare("SELECT author_id FROM posts")) { 
$stmt->execute(); 
$stmt->bind_result($author_id); 
while ($stmt->fetch()) { 
    if ($stmt2 = $mysqli2->prepare("SELECT username FROM users WHERE id=? LIMIT 1")) { 
     $stmt2->bind_param("s", $author_id); 
     $stmt2->execute(); 
     $stmt2->bind_result($username); 
     $stmt2->fetch(); 
     $stmt2->close(); 

     //showing username 
     echo $username; 
    } 
} 
$stmt->close(); 
+0

另外,還有準備的濫用。它必須在循環之外進行。正如現在寫的,它會在每一步重新初始化準備好的語句,並且工作起來會更慢然後簡單mysqli-> query – unconnected

+1

你不認真嗎?! –

+0

@AlexanderKouznetsov您能否請建議任何其他方式做到這一點? – mwaseema

2

本網站的PHP部分有時會令我眼睛酸澀。不僅問題在編程的每個方面都缺乏基礎知識,而且答案也促進了可怕的實踐。

  1. 你必須報告錯誤讓自己意識到某些原因。無論是通常的方式,通過$conn->error或在異常模式下設置mysqli。
  2. 讀取錯誤消息後,您可以谷歌的解決方案 - store_result()
  3. 對於這樣的數據集,永遠無需環路,因爲你必須使用JOIN代替:

所以整個代碼成爲

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

$sql = "SELECT username FROM posts p, users u WHERE u.id=author_id"; 
$res = $mysqli->query($sql); 
while ($row = mysqli_fetch_row()) { 
    echo $row[0]; 
} 
+0

是啊!我在你問之前就做到了這一點,但忘了告訴這裏。 '不同步的命令;你現在不能運行這個命令。 您要求使用連接,但我正在使用準備好的語句,我認爲他們不允許這樣做。 – mwaseema

+0

你對準備的陳述有很奇怪的想法 –

+0

你能指導我嗎?我試圖這樣做,php和Mysql說命令不同步。 – mwaseema