2010-12-14 4 views
0

Я не уверен, почему это меня насторожило. У меня есть следующий код:Отправка косой черты через mysql

$website = "http://www.google.com"; 
$name = "Person"; 

if(!empty($website) { 
    $name = "[url=$website]$name[/url]"; 
} 

Затем я пытаюсь вставить его в mysql. Я попытался добавить mysql_real_escape_string как на $ website, так и в $ name (после оператора if), считая, что «/ url» также может вызвать проблемы.

$name  = mysql_real_escape_string($name); 

По-прежнему не везет. Любой совет? Что мне не хватает? Это дает мне эту ошибку

«Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный„/“, ожидая T_STRING или T_VARIABLE или T_NUM_STRING»

+1

В чем проблема? Что происходит? –

+0

'mysql_real_escape_string' должен защищать строку независимо от того, что происходит. Если у вас все еще есть проблемы, это может быть неправильное использование mysql_real_escape_string (как вы это называете?) Или сценарий, неправильно читающий правильные данные, хранящиеся в базе данных (как вы его читаете?). –

+0

Не могли бы вы предоставить SQL-запрос и ошибку, которую вы получили? – Catalin

ответ

5

попробовать

if(!empty($website)) { 
    $name = "[url={$website}]{$name}[/url]"; 
} 

затем используйте

mysql_real_escape_string ($name); 
+0

+1: Д'о, я должен был видеть это. Красиво сделано! –

+0

Святое дерьмо, что сработало. Можете ли вы сообщить мне, почему? Что сделали скобки? – Andelas

+1

Ну, скобки внутри кавычек указывают php на переменные. Это означает, что zend-движки используют его как переменную php и включают ее значение. Иногда, без скобок, это беспорядок с другими вещами. – Nik

0

Там обыкновение быть никаких проблем вообще. При чтении из базы данных вы должны поместить stripslashes() вокруг своего значения.
, например.

$query = "SELECT field FROM table"; 
$row = mysql_fetch_array(mysql_query($query)); 

echo(stripslashes($row['field'])); 

И ваш выход будет таким же, как ВАШЕГО входа.

1

Это проблема синтаксиса PHP. Парсер считает, что $ name [это начало ссылки на массив, вы должны добавить фигурные браслеты, чтобы рассказать парсер, где начинается и заканчивается имя переменной: «[url = {$ website}] {$ name} [/ url] "

0

Убедитесь, что вы цитируете значения вы отправляете в запросе, например, так:

$sql = "INSERT INTO table (column) VALUES ('$value')"; 

Что бы ни было в $ значение получает передается в запросе. Если вы откажетесь от котировок, могут произойти плохие вещи, даже если вы используете mysql_real_escape_string(). Внутри строк косые черты в MySQL не имеют особого значения, поэтому mysql_real_escape_string() оставляет их нетронутыми. Это не ошибка, а документальное, правильное поведение. В принципе, вам нужно указать все значения в вашем запросе.

Однако лучшим решением IMHO является использование PDO и его параметризованных запросов вместо API mysql_XXX. Это немного сложнее (не так много), и он позволяет передавать параметры в запрос через ассоциативный массив, выполняя все выходы и кавычки, которые вам нужны.

0

Вы помещаете кавычки вокруг значения, которое хотите вставить? Это будет работать

INSERT INTO table_name (column_name) 
VALUES ('[url=$website]http://www.google.com[/url]') 

Это потерпит неудачу

INSERT INTO table_name (column_name) 
VALUES ([url=$website]http://www.google.com[/url]) 

Таким образом, вы могли бы иметь в вас PHP

$query = "INSERT INTO table_name (column_name) VALUES ('$name')"; 
// DO MYSQL_QUERY 
Смежные вопросы