PHP - ошибка при привязке переменной к подготовленному выражению - PullRequest
0 голосов
/ 19 февраля 2019

При попытке связать переменную $ 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 ="select * from user_qualification где qual_id =?";

Редактировать 2:
изменено с "s" на "i".
mysqli_stmt_bind_param ($ result, "i", $ user_id);

Редактировать 3:
var_dump переменной $ user_id после оператора if
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
var_dump on $ user_id:
int (1) []
Но массив все ещеl пусто.

Редактировать 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);

1 Ответ

0 голосов
/ 19 февраля 2019

После того, как вы поделились дампом $user_id, похоже, это результат mysql.Чтобы извлечь ваш идентификатор оттуда, вы должны использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...