Intereting Posts
Разрешить пользователю добавлять поля в форму, созданную с помощью Zend Framework Получить долготу и широту в качестве пользовательской машины в PHP Как узнать, подключен ли пользователь к веб-сайту с помощью баз данных, базирующихся на php и mysql? добавить два массива вместе, поддерживать индексы Проблема с расширением шифра OpenSSL Определить 2D-массив с циклами в php PHP Получить URL-адрес и поиск строки Обслуживание статического содержимого из домена Cookieless – использование субдомена и .htaccess htaccess перенаправляет все, кроме одной страницы, из html в php выбор всех заказов за последние 30 дней и подсчет количества в день Назначение и передача сеансов Переменные между субдоменами Функции формы Symfony 2 Twig недоступны Поиск массива без учета регистра Ошибка PhpUnit в PhpStorm с кодом выхода 255 в проекте Symfony 2 Как получить int вместо строки из формы?

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' '') 'в строке 2

Я получаю ошибку в MySQL:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''')' at line 2'. 

Код HTML:

 <form action="read_message.php" method="post"> <table class="form_table"> <tr> <td style="font-weight:bold;">Subject:</td> <td><input style=" width:300px" name="form_subject"/></td> <td></td> </tr> <tr> <td style="font-weight:bold;">Message:</td> <td id="myWordCount">&nbsp;(300 words left)</td> <td></td> </tr> <tr> <td><input type="hidden" name="sender_id" value="<?php echo $sender_id?>"></td> <td><textarea cols="50" rows="4" name="form_message"></textarea></td> <td valign="bottom"><input type="submit" name="submit_message" value="send"></td> </tr> </table> </form> 

Код для вставки в таблицу mysql:

 <?php include_once"connect_to_mysql.php"; //submit new message if($_POST['submit_message']){ if($_POST['form_subject']==""){ $submit_subject="(no subject)"; }else{ $submit_subject=$_POST['form_subject']; } $submit_message=$_POST['form_message']; $sender_id = $_POST['sender_id']; if($shortMessagesLeft<1){ $form_error_message='You have left with '.$shortMessagesLeft.' Short Message. Please purchase it from the <a href="membership.php?id='.$id.'">shop</a>.'; } else if($submit_message==""){ $form_error_message = 'Please fill in the message before sending.'; } else{ $message_left = $shortMessagesLeft-1; $update_short_message = mysql_query("UPDATE message_count SET short_message = '$message_left' WHERE user_id = '$id'"); $sql = mysql_query("INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) VALUES('$sender_id', '$id', now(),'$submit_subject','$submit_message')") or die (mysql_error()); } } ?> 

Что означает ошибка и что я делаю неправильно?

Существует одна цитата в $submitsubject или $submit_message

Почему это проблема?

Шаблон одиночной кавычки завершает строку в MySQL и все прошлое, которое рассматривается как команда sql. Вы ДЕЙСТВИТЕЛЬНО не хотите писать свой sql вот так. В лучшем случае ваше приложение будет прерываться с перерывами (как вы это наблюдаете), и в худшем случае вы только что внедрили огромную уязвимость безопасности.

Представьте, если кто-то представил '); DROP TABLE private_messages; '); DROP TABLE private_messages; в сообщении.

Ваша команда SQL:

 INSERT INTO private_messages (to_id, from_id, time_sent, subject, message) VALUES('sender_id', 'id', now(),'subjet',''); DROP TABLE private_messages; 

Вместо этого вам нужно правильно дезинфицировать свои ценности.

В MINIMUM вы должны запускать каждое значение через mysql_real_escape_string() но вы действительно должны использовать подготовленные операторы.

Если вы используете mysql_real_escape_string() ваш код будет выглядеть так:

 if($_POST['submit_message']){ if($_POST['form_subject']==""){ $submit_subject="(no subject)"; }else{ $submit_subject=mysql_real_escape_string($_POST['form_subject']); } $submit_message=mysql_real_escape_string($_POST['form_message']); $sender_id = mysql_real_escape_string($_POST['sender_id']); 

Вот отличная статья о подготовленных заявлениях и PDO.

Это называется SQL INJECTION. ' Пытается открыть / закрыть строку в вашем запросе mysql. Вы всегда должны избегать любой строки, которая попадает в ваши запросы.

например,

вместо этого:

 "VALUES ('$sender_id') " 

сделай это:

 "VALUES ('". mysql_real_escape_string($sender_id) ."') " 

(или эквивалент, конечно)

Однако лучше автоматизировать это, используя PDO, именованные параметры, подготовленные заявления или многие другие способы. Исследование об этом и SQL Injection ( здесь у вас есть некоторые методы).

Надеюсь, поможет. ура

Пожалуйста, убедитесь, что вы полностью загрузили sqldump, эта проблема очень распространена, когда мы пытаемся импортировать половину / неполную загруженную sqldump. Проверьте размер файла sqldump.

Я получал ту же ошибку, когда я использовал этот код для обновления записи:

 @mysqli_query($dbc,$query or die())) 

После удаления or die он начал работать правильно.

Раньше у меня была эта проблема, и причина очень проста: проверьте свои переменные, если есть строки, поэтому поставьте их в кавычки «$ your_string_variable_here», если бы они были численными, сохраните их без кавычек. например, если бы у меня были эти данные: $ name (это будет строка) $ phone_number (будет численным). Таким образом, это будет выглядеть так:

$ query = "INSERT INTO users ( name , phone ) VALUES ('$ name', $ phone)"; Точно так же и будет исправлено ^ _ ^