簡體   English   中英

PHP-將變量綁定到Prepared語句時出錯

[英]PHP - Error while binding variable to the Prepared Statement

嘗試將變量$ user_id綁定到准備好的語句時,該數組作為jsonarray發送到Java文件。 下面的代碼可以正常工作,但是沒有綁定參數,其中qual_id的值是靜態的。

if ($user_id->num_rows >= 1) {
        $mysql_qry = "select * from user_qualification where qual_id='1'";
        //$stmt = mysqli_stmt_init($conn);
        //$result = mysqli_stmt_prepare($stmt, $mysql_qry);
        //mysqli_stmt_bind_param($result, "i", $user_id);

       $result = mysqli_query($conn,$mysql_qry);
        //mysqli_stmt_execute($stmt);

        $data_item = array();
        while($row = mysqli_fetch_assoc($result)){
            array_push($data_item, 
            array('u_school'=>$row['school'],
            'u_hschool'=>$row['hschool'],
            'u_undergrad'=>$row['ugrad'],
            'u_grad'=>$row['grad'],
            'u_phd'=>$row['phd'],
            )
            );
        }

下面的代碼包含綁定參數的錯誤:

if ($user_id->num_rows >= 1) {
    $mysql_qry = "select * from user_qualification where qual_id='?'";
    $stmt = mysqli_stmt_init($conn);
    $result = mysqli_stmt_prepare($stmt, $mysql_qry);
    mysqli_stmt_bind_param($result, "s", $user_id);

    //$result = mysqli_query($conn,$mysql_qry);
    mysqli_stmt_execute($stmt);

    $data_item = array();
    while($row = mysqli_fetch_assoc($result)){
        array_push($data_item, 
        array('u_school'=>$row['school'],
        'u_hschool'=>$row['hschool'],
        'u_undergrad'=>$row['ugrad'],
        'u_grad'=>$row['grad'],
        'u_phd'=>$row['phd'],
        )
        );
    }

同樣, qual_id列也是bigint。

編輯1:
刪除了占位符的報價。
$ mysql_qry =“從user_qualification中選擇*,其中qual_id =?”;

編輯2:
從“ s”更改為“ i”。
mysqli_stmt_bind_param($ result,“ i”,$ user_id);

編輯3:
if語句后的變量$ user_id的var_dump
object(mysqli_result)#3(5){[“” current_field“] => int(0)[” field_count“] => int(1)[” lengths“] => NULL [” num_rows“] => int(1 )[“ type”] => int(0)} []

編輯4:
php文件

<?php
require "conn.php";
$user_name ="omx123"; //$_POST["user_name"];
if ($mysql_qry = $conn->prepare("Select id from UserLoginDetails where username=?")) {
    $mysql_qry->bind_param("s", $user_name);
    $mysql_qry->execute();
    $user_id = $mysql_qry->get_result();

    if ($user_id->num_rows >= 1) {
        var_dump($user_id);
        $mysql_qry = "select * from user_qualification where qual_id=?";
        $stmt = mysqli_stmt_init($conn);
        $result = mysqli_stmt_prepare($stmt, $mysql_qry);
        mysqli_stmt_bind_param($result, "i", $user_id);

        //$result = mysqli_query($conn,$mysql_qry);
        mysqli_stmt_execute($stmt);

        $data_item = array();
        while($row = mysqli_fetch_assoc($result)){
            array_push($data_item, 
            array('u_school'=>$row['school'],
            'u_hschool'=>$row['hschool'],
            'u_undergrad'=>$row['ugrad'],
            'u_grad'=>$row['grad'],
            'u_phd'=>$row['phd'],
            )
            );
        }
        echo json_encode($data_item);
    }
} 
$conn->close();
?>

編輯5:
感謝您的幫助用戶:dWinder
$ user_id上的var_dump:
int(1)[]
但是數組仍然為空。

編輯6:
現在可以完美工作了:D

$mysql_qry = "select * from user_qualification where qual_id=?";
         $stmt = mysqli_stmt_init($conn);
         mysqli_stmt_prepare($stmt, $mysql_qry);
         mysqli_stmt_bind_param($stmt, "i", $user_id_int);
         mysqli_stmt_execute($stmt);
         $result=mysqli_stmt_get_result($stmt);

共享$user_id的轉儲后,似乎是mysql結果。 為了從那里提取您的ID,您應該使用mysqli_fetch_assoc

if ($user_id->num_rows >= 1) {
    $row = mysqli_fetch_assoc($user_id)
    $user_id_int = $row["id"]; // or what ever you used to call it

    // now you can call the bind...
    $mysql_qry = "select * from user_qualification where qual_id=?";
    $stmt = mysqli_stmt_init($conn);
    $result = mysqli_stmt_prepare($stmt, $mysql_qry);
    mysqli_stmt_bind_param($result, "i", $user_id_int);

我假設您使用查詢的方式為:“ SELECT id From ...”與獲取$user_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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