2015-06-08 3 views
0

У меня есть поле MySQL («imagelocation»), которое содержит относительный путь к изображению. По существу конструкция: «DirectoryName/ImageName.png« / «вызывает проблему. Я получаю сообщение об ошибке: «Неизвестный столбец« Аналог »в поле« »(аналоговый - это имя каталога.)MySQLI- Разрешить использование прямого слэша с помощью оператора вставки

Перед созданием имени пути выполняется следующий код для возврата только" чистый "изображение name.

$imagelocation=trim(SanitizeString($_FILES['imagevar']['name'])); 

Имя пути строится с помощью следующего кода:

$imagelocation=trim($magazinedirectory . "/" . $imagelocation); 

Запрос будет выполнен:

$query="INSERT INTO tblIssueList(IssueDate,MagazineNUM,CoverArtistNUM,ImageLocation)" . 
     " VALUES({$issuedate},{$magazineidnum},{$artistidnum},{$imagelocation})"; 

Запрос работает, когда "imagelocation" удаляется. Запрос также работает с "imagelocation", когда "/" удален.

Как можно сохранить относительное имя пути в поле «imagelocation»?

+2

Вы уязвим для [sql injection attack] (http://bobby-tables.com), и если вы используете правильные методы построения запросов SAFE, никогда не было бы этой проблемы в первую очередь. Как написано, вы говорите БД, чтобы сделать ОТДЕЛЕНИЕ: «ВСТАВИТЬ ... ЦЕННОСТИ (bar/baz/qux)' is »бар делится на baz, разделенный на qux», а не путь –

+0

@MarcB: Спасибо за эту мысль. Я все еще изучаю MySQLi, его медленный ход, Learning PHP, MYSQL & Javascript от Nixon охватывает использование подготовленных операторов и заполнителей для повышения безопасности. Эта база данных в настоящее время находится в домашней локальной сети. Нет доступа в Интернет. Когда я перехожу к «простым» проблемам, таким как мой текущий пост; У меня будет время, чтобы включить более продвинутые функции. –

+0

@SteveR. Честно говоря, вам лучше не учиться, чтобы это было неправильно. Любая книга, блог или учебник, в котором говорится о том, что вы когда-либо * могли создавать запросы с конкатенацией строк, а не с заполнителями, и готовые заявления, должны, безусловно, быть уволены как квалифицированный ресурс. –

ответ

1

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

$query="INSERT INTO tblIssueList(IssueDate,MagazineNUM,CoverArtistNUM,ImageLocation)" . 
    " VALUES('{$issuedate}','{$magazineidnum}','{$artistidnum}','{$imagelocation}')"; 
+1

Зачем ПП «попробуй это»? Пожалуйста, добавьте объяснение того, что вы сделали, и почему вы сделали это именно так, не только для OP, но и для будущих посетителей SO. [Подготовленные заявления] (http://en.wikipedia.org/wiki/Prepared_statement) - это путь сюда. –

+0

@Ramy Deeb: Работал! Спасибо. –

+0

@JayBlanchard: Я все еще нахожусь на дне кривой обучения. Я не знал о решении добавить цитаты, предоставленные Рами. Я знаю о подготовленных заявлениях, но еще не включил его. Моя база данных находится в домашней локальной сети, недоступной через Интернет. Разумеется, это не повод не включать лучшие подходы. По мере того, как я становлюсь более опытным, я включу расширенный код. На данный момент акцент делается на том, что база данных работает даже на начальном уровне. –

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