Синтаксическая ошибка PHP / MySQL – SQL?

Теперь, когда я отправляю персонажа ' я получаю следующую ошибку, указанную ниже, а затем, когда я отправляю слова, все в порядке. Я использую htmlentities() и я все еще получаю эту ошибку.

Как я могу предотвратить эту ошибку, существует ли способ разрешить или преобразовать или остановить отображение символа в качестве ошибки?

Вот ошибка, которую я получаю.

 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 '''')' 

Вам нужно избегать строк, которые вы отправляете в своих SQL-запросах.

Для этого вы можете использовать функцию mysql_real_escape_string .

Например, ваш код может выглядеть так (не проверен, но что-то вроде этого должен сделать трюк) :

 $str = "abcd'efh"; $sql_query = "insert into my_table (my_field) values ('" . mysql_real_escape_string($str) . "')"; $result = mysql_query($sql_query); 

Другое решение (потребует больше работы, хотя, поскольку вам придется менять больше кода) было бы использовать подготовленные инструкции; либо с mysqli_* либо с PDO, но не возможно с помощью старого расширения mysql_* .

Изменить: если это не сработает, можете ли вы изменить свой вопрос, чтобы дать нам больше информации? Как часть кода, которая вызывает ошибку?

поместите ваш SQL-запрос в переменную, например

 $query = "SELECT * FROM table WHERE field= ".mysql_real_escape_string($var).""; echo $query; $result = mysql_query($query); 

вы можете проверить, что фактически отправлено mysql в качестве запроса

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

 $text = "x'x"; // MySQL extension mysql_query($db, "INSERT INTO table VALUES ('" . mysql_real_escape_string($text, $db) . "')"); // MySQLi extension $db->query("INSERT INTO table VALUES ('" . $db->mysql_real_escape_string($text) . "')"); // PDO's prepared statement $stmt = $pdo->prepare('INSERT INTO table VALUES (:myvalue)'); $stmt->execute(array( 'myvalue' => $text )); // Another example $stmt = $pdo->prepare( 'SELECT * FROM users WHERE first_name = :first AND last_name = :last' ); $stmt->execute(array( 'first' => 'John', 'last' => 'Smith' )); foreach ($stmt as $row) { echo $row['user_id']; } 

Я настоятельно рекомендую использовать подготовленные заявления PDO , он короче в типе и проще в использовании в долгосрочной перспективе.