我試圖用預處理語句更改我的SQL查詢。 想法:我用while循環從數據庫中獲取多條記錄,然後從循環中的數據庫獲取一些附加數據。多個預處理語句(SELECT)
這是我的老SQL代碼(簡化):
$qry = "SELECT postId,title,userid from post WHERE id='$id'";
$rst01 = mysqli_query($mysqli, $qry01);
// loop trough mutiple results/records
while (list($postId,$title,$userid) = mysqli_fetch_array($rst01)) {
// second query to select additional data
$query05 = "SELECT name FROM users WHERE id='$userid";
$result05 = mysqli_query($mysqli, $query05);
$row05 = mysqli_fetch_array($result05);
$name = $row05[name ];
echo "Name: ".$name;
// do more stuff
// end of while loop
}
現在我想用預處理語句改寫這個。 我的問題:是否有可能在提取另一個準備好的語句時運行預準備語句?我仍然需要像我在$ name中使用的舊SQL代碼那樣的名稱。
這是迄今爲止所寫的內容。
$stmt0 = $mysqli->stmt_init();
$stmt0->prepare("SELECT postId,title,userid from post WHERE id=?");
$stmt0->bind_param('i', $id);
$stmt0->execute();
$stmt0->bind_result($postId,$title,$userid);
// prepare second statement
$stmt1 = $mysqli->stmt_init();
$stmt1->prepare("SELECT name FROM users WHERE id= ?");
while($stmt0->fetch()) {
$stmt1->bind_param('i', $userid);
$stmt1->execute();
$res1 = $stmt1->get_result();
$row1 = $res1->fetch_assoc();
echo "Name: ".$row1['name'] ;
}
它返回一個錯誤在循環中的第二條語句:
Warning: mysqli_stmt::bind_param(): invalid object or resource mysqli_stmt in ...
如果我使用的循環舊的方法,只是準備好的語句來獲取$名字它的工作原理。
這個問題每天都在問。通常的三層結構:沒有錯誤報告,無法運行嵌套語句,必須使用JOIN來代替這些嵌套循環 – 2013-03-19 14:14:04
@YourCommonSense ok ... – 2013-03-19 14:20:06