簡體   English   中英

mysql在查詢while循環中准備語句

[英]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雙重聲明(可能是$var4r4意思)

 $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM