Теперь, когда я отправляю символ '
, я получаю следующую ошибку, указанную ниже, другую, что все в порядке, когда я отправляю слова. Я использую 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 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 подготовленные заявления, он короче в типе и проще использовать в конечном итоге.