$ result Всегда возвращать 1 вместо желаемого идентификатора из базы данных - PullRequest
0 голосов
/ 11 января 2020

Моя проблема в том, как сделать мой код, идентификатор возврата, который назначен человеку, который у меня есть в базе данных, вместо 1, который я не знаю, из него приходит.

Opiekun Prawny:<select id="text_box_od" name="fullname_opiekun" >
<?php   
while($rows = $resultimie->fetch_assoc())
{
$full_name_opiekun = $rows['full_name_opiekun'];    
echo "<option value='$full_name_opiekun'>$full_name_opiekun</option>";
}
?>
</select>
<?php

    $con=mysqli_connect('localhost','root','','aplikacja_kolonijna');
    if(!$con)
    {
        echo 'Data base not found';
    }


    $fullname_opiekun = $_POST['fullname_opiekun'];

    $check = "SELECT id_opiekun FROM opiekun where concat(imie_opiekun,' ',nazwisko_opiekun,' - ',pesel_opiekun) like '$fullname_opiekun'";
    $query =  mysqli_query($con,$check);

    $result = intval(mysqli_fetch_row($query));


    echo $result;
    echo $fullname_opiekun;

На самом деле человек, которому я звоню, это "Kazimierz Kowalczyk 14212312312", и это человек, которого я имею в моей базе данных, но с идентификатором 3.

Мой код, вместо возврата 3, когда я проверяю echo $result;, возвращает 1, все время, и теперь у меня есть идея, как заставить его работать так, как я хочу.

Когда я проверяю echo $full_name_opiekun;, это показывает мне, что мой SELECT работает и возвращает мне "Kazimierz Kowalczyk 14212312312" ... почему я не могу получить правильное удостоверение личности?

Ответы [ 3 ]

1 голос
/ 11 января 2020

Вы должны помнить, что когда у вас есть входные данные для передачи в SQL, вы должны использовать подготовленные операторы и связывать параметры. Если вы используете подготовленные операторы, то для извлечения одного значения из результата вам нужно использовать только $stmt->bind_result($yourVariable), а затем $stmt->fetch()

Я исправил ваш код и также включил отчеты об ошибках. Вы всегда должны убедиться, что он включен.

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = mysqli_connect('localhost', 'root', '', 'aplikacja_kolonijna');
$con->set_charset('utf8mb4'); // always set the charset

$fullname_opiekun = $_POST['fullname_opiekun'];

// Execute the query
$check = "SELECT id_opiekun FROM opiekun where concat(imie_opiekun,' ',nazwisko_opiekun,' - ',pesel_opiekun) like ?";
$stmt = $con->prepare($check);
$stmt->bind_param('s', $fullname_opiekun);
$stmt->execute();

// Bind the first column as a result
$stmt->bind_result($result);
$stmt->fetch(); // Fetch the value

echo $result;
echo $fullname_opiekun;
0 голосов
/ 11 января 2020

Не усложняйте, этого достаточно:

//...
$check = "SELECT id_opiekun FROM opiekun where concat(imie_opiekun,' ',nazwisko_opiekun,' - ',pesel_opiekun) like '$fullname_opiekun'";
$query =  mysqli_query($con,$check);

$result = mysqli_fetch_row($query);
echo $result[0];  // as `fetch_row` returns 0-indexed array

// example to fetch associative array:
//$result = mysqli_fetch_assoc($query);
//echo $result['id_opiekun'];
0 голосов
/ 11 января 2020

Не приводите массив результатов к целому числу. Вам необходимо использовать индекс.

Вы также должны использовать подготовленные операторы с параметризованными запросами и использовать функцию сообщения об ошибках, чтобы вы знали, когда ошибки возвращаются.

$fullname_opiekun = $_POST['fullname_opiekun'];
$check = "SELECT id_opiekun FROM opiekun where concat(imie_opiekun,' ',nazwisko_opiekun,' - ',pesel_opiekun) like ?";
if ($stmt = mysqli_prepare($con, $check)) {
    mysqli_stmt_bind_param($stmt, "s", $fullname_opiekun);
    mysqli_stmt_bind_result($stmt, $id_opiekun);
    mysqli_stmt_fetch($stmt);
    echo $id_opiekun;
    mysqli_stmt_close($stmt);
} else {
    printf("Error message: %s\n", mysqli_error($con));
}
...