Вызов SQL в браузере отличается от вызова SQL в MySQL Workbench

0

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

Эта проблема

Когда getBook.php вызывается JS, он подключается к моей базе данных и отправляет довольно простой запрос: "получить название книги с этим идентификатором". При вызове в MySQL Workbench он возвращает соответствующий заголовок. Однако при вызове из функции JS браузера запрос возвращает пустой результат.

Что я пробовал

Для простоты я исключил все причудливые средства проверки ошибок и создания jquery, и только что мой JS повторил мне, что он получил от php.

Я также посмотрел на Stackoverflow SyntaxError: missing] после списка элементов, когда пытаюсь передать параметр объекта в вопрос функции onclick, но это тоже не помогло.

Я peppered getBook.php с функциями die(), но каждая функция die, которую я использовал, только что подтвердила, что скрипт работает так, как будто я хочу его, за исключением одного: когда я использую этот оператор sql в MySQL Workshop, я получаю название книги Я хочу в результате. Когда getBook.php вызывается из браузера, он получает следующее:

{ "Current_field": NULL, "field_count": NULL, "длина": NULL, "num_rows": NULL, "тип": NULL}

Соответствующий JavaScript

function checkout(isbnNo=1, userID=1) {
$.ajax({
    type: "POST",
    url: "php/checkout.php",
    dataType: "text",
    // @TODO: add scanner functionality to populate isbn,
    //  add functionality to populate user
    data:
    {
        isbn: isbnNo,
        user: userID
    },
    success: function(result) {
        // change #button-text to house result (for now)
        // @TODO: delete errorcheck when done
        $('#button-text').html(result);
        console.log(result);
    },
    error: function(xhr, status, error) {
        alert(status + ' ||| ' + error);
    }
});
}

// extraneous functions...

// THIS FUNCTION RIGHT HERE. VVVVVVVVV
function getBook(bookID=1, userNo=1) {
    $.ajax({
        type: "POST",
        url: "php/getBook.php",
        data: {
            book: bookID,
            user: userNo
        },
        dataType: "text",
        success: function(result) {

            $("#button-text").html(result);
            console.log(result);
        }
    })
}

getBook.php

<?php
require("utility.php");
if($_SERVER["REQUEST_METHOD"]=="POST") {
    $book = (int)cleanInput($_POST["book"]); // from string to int
    logIntoDataBase($dbconn, "../docs/server-info-sr.txt");
    $query = "  SELECT
                    title
                FROM
                    books
                WHERE
                    isbn = $book;";
    $result = $dbconn->query($query);
    if ($result)
        echo json_encode($result);
    else
        echo "ERROR: unsuccessful query";
    //disconnect when finished
    disconnectDB($dbconn,$dbName);
}
?>

(cleanInput(), для всех, кто интересуется)

function cleanInput($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data);
    $data = htmlentities($data);
    return $data;
}
  • 1
    Используйте консоль браузера, чтобы увидеть, что ваш Ajax отправляет и получает. Если вызывается checkout.php, то вы можете вставить точки останова (команды die), чтобы увидеть, где они ломаются. Ваша консоль должна быть в состоянии показать вам линию, вызывающую проблему. Не нужно угадывать.
  • 2
    К вашему сведению - ваш sql-запрос открыт для инъекций. Проверьте подготовленные заявления.
Показать ещё 5 комментариев
Теги:
mysql-workbench
localhost

1 ответ

0
Лучший ответ

Ответьте на кредит @TimMorton Tim Morton за мягкое напоминание мне, что мне нужно использовать fetch_assoc для извлечения строки из моих возвращенных запросов в PHP:

$query = "  SELECT
                b.title, b.isbn
            FROM
                books b
            WHERE
                b.isbn = $book;";
$myArray = array();
$result = $dbconn->query($query);
if ($result) {
    // vvvvv the while loop with the fetch_assoc fixed everything
    while($row = $result->fetch_assoc()) {
        $myArray[] = $row;
    }
    echo json_encode($myArray[0]);
}
  • 1
    И этот запрос все еще очень уязвим :( Почему бы вам даже не поставить кавычки вокруг $book ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню