2014-08-18 2 views
-1

Я беру данные из внешнего XML-файла, поэтому я не могу вносить изменения. Также мне нужны все специальные символы.Вставить символ в sql

Это XML

<item> 
<name>Lucy</name> 
<embed><iframe src='http://website.com style='something:somehow'></iframe></embed> 
</item> 

Это таблицы SQL

$sql = "CREATE TABLE IF NOT EXISTS `models`(
    `model_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    `model_username` VARCHAR(250) NOT NULL, 
    `model_embed` TEXT NOT NULL)"; 

XML в SQL

foreach ($items as $item) { 
     $name=$item->name; 
     $iframe=$item->embed; 

$ins = " INSERT INTO `models` (`model_username`, `model_embed`) 
     VALUES ('$name', '$iframe') 
} 

И я получаю эту ошибку

1064: У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «http://website.com стиля =» что-то: как-то»в строке 9

+0

@MarcB Является ли это действительно ** дубликат ** из SQL инъекций? – Sugar

+0

Отсутствует цитата и точка с запятой. –

+0

@ Fred-ii- Не приведет ли это к ошибке синтаксического анализа ошибки SQL? –

ответ

1

Хотя, @ Fred-II- берет пирога с пятнистостью некорректного закрытия причина

Похоже, у вас есть ряд проблем в вашем коде.

Во-первых, вы не закрываем переменные от правильно:

$ins = " INSERT INTO `models` (`model_username`, `model_embed`) 
     VALUES ('$name', '$iframe') 

Решение этой проблемы было бы:

$ins = "INSERT INTO `models` (`model_username`, `model_embed`) 
     VALUES ('$name', '$iframe')"; 

Обратите внимание на закрытие двойные кавычки и точкой с запятой в конце переменная.

Хотя, укупорочное вопрос, касающийся SQL injection было несколько действительно, как сообщение об ошибке указывает:

«http://website.com стиль =» кое-что: как-то»

Как вы вводите данные напрямую в ваш запрос вы сталкиваетесь с ошибками форматирования с пре-maturley, закрывающим ваш синтаксис SQL, который вызывает некоторые неожиданные ошибки на вашем конце. Решением могло бы стать замена подготовленных операторов, которые могут быть использованы в MySQLi (MySQL Improved library) или PDO.

+0

Я также думаю, что OP также должен использовать 'stripslashes()' и чтобы избежать ввода. Это может быть фактором, связанным с кавычками в '' или другом входе. –

+0

, в то время как PHP-код нуждается в исправлении, фактическая ошибка SQL предполагает, что строка запроса DID создается и выполняется, а затем возникает из-за проблемы с инъекцией, вызывающей SQL-синтаксические ошибки. –

-1

Используйте следующие функции:

mysql_escape_string ($ String)

+1

Нет. Не используйте это. эта функция является одновременно дефрагментированной/устаревшей и ** НЕ ** правильным решением проблемы. –

Смежные вопросы