подготовленные заявления и базы данных - PullRequest
0 голосов
/ 18 июня 2019

Данные не поступают в базу данных. Я могу создать таблицу, но не могу вставить данные из формы. Я вижу только нули.

Мой последний вопрос, мне предложили использовать подготовленные высказывания. Итак, я имитировал руководство. Я упростил код все, что я могу. Другие вопросы предлагали определить переменные перед привязкой операторов, и я попытался переместить переменные. (Обратите внимание: переменная $ user находится в обязательном файле)

/* Non-prepared statement */
if (!$mysqli->query("DROP TABLE IF EXISTS profiles") || !$mysqli->query("CREATE TABLE profiles
    (user VARCHAR(16), text VARCHAR(355))")) {
    echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

$text = sanitizeString($_POST['text']);
$text = preg_replace('/\s\s+/', ' ', $text);


/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("INSERT INTO profiles
    (user, text) VALUES (?,?)"))) {
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

/* Prepared statement, stage 2: bind and execute */

if (!$stmt->bind_param("ii", $user, $text)) {
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}

if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}

/* explicit close recommended */
$stmt->close();

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

1 Ответ

0 голосов
/ 18 июня 2019

Вы передаете целые числа в таблицу в строке

if (!$stmt->bind_param("ii", $user, $text)) {
                        ^^

i является целым числом, s является строкой.

if (!$stmt->bind_param("ss", $user, $text)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...