![](/img/trans.png)
[英]MySQL prepared statement (two tables' data) and PHP while & for loop combination
[英]mysql prepared statement in query while loop
我正在嘗試在返回查詢的while循環的每次迭代內運行mysql查詢。 如果我使用普通的查詢功能(mysqli_query),它可以工作。 但是,如果我將其作為准備好的語句運行,它將不再起作用。 我不確定問題出在哪里。
這是工作代碼:
function pagGenerateResult(){
$pgSql = "SELECT * from table1 ;"
$result = $conn->query($pgSql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$var1=$row["r1"] ;
$var2=$row["r2"] ;
$var3=$row["r3"] ;
$var3=$row["r3"] ;
$insertSql= " UPDATE pg_rd SET num1='$var1' ,num2='$var2',num3='$var3' WHERE num4='$var4' ";
mysqli_query($conn,$insertSql);
}
} else {
echo "MySQL Error: 0 result ";
}
$result->free();
$conn->close();
die();
}
而且,如果我將while循環內的邏輯更改為如下所示的prepare語句,它將停止工作。
function pagGenerateResult(){
$conn=new mysqli($servername,$username,$password,$dbname);
$pgSql = "SELECT * from table1 ;"
$result = $conn->query($pgSql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$var1=$row["r1"] ;
$var2=$row["r2"] ;
$var3=$row["r3"] ;
$var3=$row["r3"] ;
$insertSql= " UPDATE pg_rd SET num1=? ,num2=?,num3=? WHERE num4=? ";
//prepared statement
$stmt=mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt,$insertSql)){
echo "SQL prepared statement error";
}
else{
mysqli_stmt_bind_param($stmt,"fffi",$var1,$var2,$var3,$var4);
mysqli_stmt_execute($stmt);
}
}
// echo $recomSpace. " ". $numPgs. " ". $numSlot;
} else {
echo "MySQL Error: 0 result ";
}
$result->free();
$conn->close();
die();
}
首先,您有$var3
雙重聲明(可能是$var4
和r4
意思)
$var1=$row["r1"] ;
$var2=$row["r2"] ;
$var3=$row["r3"] ;
$var3=$row["r3"] ;
其次,可以使用update-join代替在PHP中使用循環
update pg_rd p
inner join table1 t on t.r4 = p.num4
set
p.num1 = t.r1,
p.num2 = t.r2,
p.num3 = t.r3
;
您可以嘗試下面的代碼。 我選擇了程序風格的mysqli,以便保持一致並易於理解。 我還沒有完全測試代碼。 希望它已經可以正常工作了。
您沒有設置$ var4 。 檢查代碼中的注釋問題。
function pagGenerateResult(){
$conn=mysqli_connect($servername,$username,$password,$dbname);
$pgSql = "SELECT * from table1";
$result = mysqli_query($conn, $pgSql);
if ( mysqli_num_rows( $result ) > 0) {
while($row = mysqli_fetch_assoc($result)) {
$var1=$row["r1"] ;
$var2=$row["r2"] ;
$var3=$row["r3"] ;
$var4=$row["r3"] ; // r3 or r4?
$insertSql= " UPDATE pg_rd SET num1=? ,num2=?,num3=? WHERE num4=? ";
//prepared statement
$stmt = mysqli_stmt_init($conn);
if( mysqli_stmt_prepare($stmt,$insertSql) == FALSE ) {
echo "SQL prepared statement error";
}
else{
mysqli_stmt_bind_param($stmt,"fffi",$var1,$var2,$var3,$var4);
mysqli_stmt_execute($stmt);
}
}
mysqli_free_result($result);
} else {
echo "MySQL Error: 0 result ";
}
mysqli_close( $conn );
die();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.