Учебное пособие по использованию INSERT INTO без добавления строки в базу данных для определенных записей - PullRequest
0 голосов
/ 08 декабря 2018

Я слежу за последней частью следующего видеоурока "Как создать веб-сайт базы данных с PHP и mySQL 07 - добавить в форму ввода" :

https://www.youtube.com/watch?v=MGIG00d1Xzc&list=PLhPyEFL5u-i0zEaDF0IPLYvm8zOKnz70r&index=7

В конце приведен мой код для вставки части в базу данных для скрипта new_jokes.php (все, что было до этого момента серии, я до сих пор работал нормально)

В основномЯ получаю, казалось бы, классическую «INSERT INTO» не работающей, хотя весь мой синтаксис выглядит правильно.Я что-то упускаю здесь очевидное?Я не получаю ошибок, только строка не добавляется.

<?php

include "db_connect.php";

$new_joke_question = $_GET["newjoke"];
$new_joke_answer = $_GET["newanswer"];

// Search the database for the word chicken
echo "<h2>Trying to add a new joke and answer: $new_joke_question  
$new_joke_answer </h2>";

$sql = "INSERT INTO Jokes_table (JokeID, Joke_question, Joke_answer) VALUES 
(NULL, '$new_joke_question', '$new_joke_answer' )";
$result = $mysqli->query($sql);

include "search_all_jokes.php";
?>
<a href="index.php">Return to the main page</a>

Вот код db_connect.php, как было запрошено:

<?php

// four variables to connect the database
$host = "localhost";
$username = "root";
$user_pass = "usbw";
$database = "test";

// create a database connection instance
$mysqli = new mysqli($host, $username, $user_pass, $database);

?>

Вот search_all_jokes.php (который имеет незначительныйпроверка ошибок):

// if there are any values in the table, select them one at a time 
if ($mysqli->connect_errno) {
    echo "Connection to MySQL failed: (" . $mysqli->connect_errno . ") " . 
$mysqli->connect_error;
} 
echo $mysqli->host_info . "<br>";
$sql = "SELECT JokeID, Joke_question, Joke_answer FROM Jokes_table";
$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "JokeID: " . $row["JokeID"]. " - Joke_question: " . 
$row["Joke_question"]. " " . $row["Joke_answer"]. "<br>";
    }
} else {
    echo "0 results";
}


?>  

Также вот скриншот структуры таблицы, просмотренный в myPHPAdmin: enter image description here

Я добавил захват ошибок в new_jokes.php, вдохновленный этим сообщением переполнения стека: INSERT INTO SYNTAX ERROR

и получить следующую ошибку: Ошибка: в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с 't jump'.) 'в строке 1 localhost через TCP / IP

1 Ответ

0 голосов
/ 15 декабря 2018

Спасибо всем за помощь в этом!Синтаксис действительно может взломать все.Я также буду читать подготовленные заявления, поскольку это также могло бы предотвратить проблему.В конечном счете, я нашел решение, добавив функцию, указанную здесь для MySQLi real_escape_string , чтобы очистить одиночную кавычку, содержащуюся в ответе, который я отправлял в свою таблицу шуток:

(Может ли кенгуру прыгнуть выше, чем Эмпайр-Стейт-Билдинг? Конечно, Эмпайр-Стейт-Билдинг не может прыгнуть.)

Как показано в документации @ miken32, связанной как комментарий здесь это говорит: "Но если $ val1 или $ val2 содержат одинарные кавычки, это сделает ваш SQL ошибочным. Поэтому вам нужно избегать его, прежде чем он будет использован в sql; для этого предназначен mysql_real_escape_string. (Хотя подготовленное утверждение лучше.) "

Но теперь код для этой части 7 учебника по вашей трубе, который я нашел, работает и добавляет его в строку в таблице базы данных, затем отображаяполная новая таблица на следующей веб-странице.Я потратил много времени на съемку в темноте, в то время как ответ оказался довольно простым.Еще раз отдельное спасибо @ miken32 за то, что он указал мне правильное направление.

Вот мой законченный код, который в итоге работал, по крайней мере, для достижения цели учебника:

<?php

include "db_connect.php";

$new_joke_question = $_GET["newjoke"];
$new_joke_answer = $_GET["newanswer"];

$new_joke_question = $mysqli->real_escape_string($new_joke_question);
$new_joke_answer = $mysqli->real_escape_string($new_joke_answer);

// Search the database for the word chicken
echo "<h2>Trying to add a new joke and answer: $new_joke_question  $new_joke_answer 
</h2>";

if ($mysqli->connect_errno) {
    echo "Connection to MySQL failed: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
} 
echo $mysqli->host_info . "<br>";
$sql = "INSERT INTO Jokes_table (JokeID, Joke_question, Joke_answer) VALUES ('   ', 
'$new_joke_question', '$new_joke_answer' )";
$result = $mysqli->query($sql);


if ($mysqli->query($sql) === TRUE) {
  echo 'users entry saved successfully';
}   
else {
  echo 'Error: '. $mysqli->error .'<br>';
}


include "search_all_jokes.php";
?>
<a href="index.php">Return to the main page</a> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...