PHP - ошибка при привязке переменной к подготовленному выражению

58
5

При попытке связать переменную $ user_id с подготовленным оператором, массив отправляется как jsonarray в файл java. Приведенный ниже код работает отлично, но без параметра binded, где значение 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'],
)
);
}

Ниже приведен код ошибки, связанный с параметром binded:

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:
изменилось с "с" на "я".
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 на $ user_id:
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);

спросил(а) 2019-02-19T17:13:00+03:00 1 год, 8 месяцев назад
1
Решение
70

После того, как вы поделились $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

ответил(а) 2019-02-19T17:47:00+03:00 1 год, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема