我试图在返回查询的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循环中的逻辑更改为如下所示的预准备语句,它就会停止工作。
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();
}
答案 0 :(得分:0)
首先,你有$var3
的双重声明(可能你的意思是$var4
和r4
)
$var1=$row["r1"] ;
$var2=$row["r2"] ;
$var3=$row["r3"] ;
$var3=$row["r3"] ;
其次,不是在PHP中使用循环,而是使用update-join
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
;
答案 1 :(得分:0)
您可以尝试以下代码。我选择了程序风格的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();
}