MySQL UPDATE изменяет значение на «0» вместо предоставленного целого числа при использовании bind_param - PullRequest
0 голосов
/ 26 января 2019

Используя AJAX, я пытаюсь обновить таблицу 'forminfo' в базе данных MySQL, вызывая скрипт php через GET и предоставляя id (целочисленное значение). Тем не менее, когда я вызываю changeRequestedQ.php? Id = 4, например, ячейка таблицы будет обновляться до 0, а не 4.

Столбец «queryQ» отформатирован как INT (11). Когда я пытаюсь обновить $id = 4 вручную, оно работает, и ячейка таблицы обновляется до 4.

require_once("msqli_config.php");

$id = $_GET['id']; // doesn't work, table cell updates to 0, whatever integer value I pass through file.php?id=<int>
$id = (int)$_GET['id']; // no change in outcome
$id = 4; // works, table cell updates to 4

try {
    $stmt1 = $mysqli->prepare("UPDATE forminfo SET requestedQ = ? WHERE id = 1;");
    $stmt1->bind_param("i", $id);
    $stmt1->execute();
    $stmt1->close();
} catch (Exception $e) {
    error_log($e);
    exit();
}

$mysqli->close();

Я пытался заставить PHP проанализировать значение как целое число, используя (int)$_GET['id'], но не было никакой разницы.

Дополнительные варианты (без использования подготовленных выписок):

$sql = "UPDATE forminfo SET requestedQ = '4' WHERE id = 1";
$mysqli->query($sql); // updates to 4
echo $sql; // UPDATE forminfo SET requestedQ = '4' WHERE id = 1

$sql = "UPDATE forminfo SET requestedQ = 4 WHERE id = 1";
$mysqli->query($sql); // updates to 4
echo $sql; // UPDATE forminfo SET requestedQ = 4 WHERE id = 1

$sql = "UPDATE forminfo SET requestedQ = '" . $id . "' WHERE id = 1";
$mysqli->query($sql); // updates to 0
echo $sql; // UPDATE forminfo SET requestedQ = '4' WHERE id = 1

$sql = "UPDATE forminfo SET requestedQ = " . $id . " WHERE id = 1";
$mysqli->query($sql); // updates to 0
echo $sql; // UPDATE forminfo SET requestedQ = 4 WHERE id = 1

UPDATE Будучи в отчаянии, так как я не мог сообразить разницу в результатах между ранее упомянутыми фрагментами кода, я попытался, если это могло быть определенной проблемой браузера. Оказывается, что приведенный выше код работает как чудо в MS Edge, а также в Google Chrome в режиме инкогнито, но не в обычном сеансе. Как это может быть? Это связано с кэшированием? Я отключил кеш в инструментах разработчика, но это не помогло ...

1 Ответ

0 голосов
/ 27 января 2019

Я решил свою проблему.Думая, что это было PHP / MySQL, я никогда не изучал ни поведение своих браузеров, ни параметры запроса и ответа.Мой плохой ...

Оказывается, плагин браузера в Chrome отправлял второй пустой запрос GET (без строки запроса) в тот же пункт назначения после завершения загрузки исходного запроса.Если $_GET['id'] определено, ячейка таблицы обновляется до 0. Удален плагин, все работает.

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