Php - пытается вставить URL в таблицу MySQL - PullRequest
3 голосов
/ 30 мая 2011

Я просто пытаюсь вставить эти объекты в таблицу с помощью php.

$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , '.$url.' ,"some string" )';

URL в приведенном выше коде: http://www.youtube.com/watch?v=sAYc3gGjYW8

Когда я оставляю столбец URL пустым, он работает, когда я помещаю в него URL-адрес, он не работает, и я получаюследующая ошибка.

"Ошибка: в вашем синтаксисе SQL есть ошибка; обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ': //www.youtube.com/watch? v = sAYc3gGjYW8, "некоторая строка") 'в строке 1. "

ВОПРОС:

Почему URL-адрес не вставляется как обычная строка?

Есть ликакая-то функция, которую мне нужно выполнить над строкой url_string, прежде чем она будет принята MySQL?

PS - столбец url в настоящее время VARCHAR (256).

Любая помощь, оценили, ребята ...

Ответы [ 5 ]

7 голосов
/ 30 мая 2011

Вы не избегаете своих входов. mysqli_real_escape_string() твой друг.

Помните, что все данные зла. Проверяйте и очищайте, в противном случае вы подвергнетесь целому ряду мерзостей - от данных, выходящих за пределы (например, строки длиной в 124 символа, когда поле имеет значение varchar (10)), до открытия кода до внедрения SQL эксплойты.

Пример:

$safe_url = mysqli_real_escape_string($database_connection_object, $url);

Кроме того, вы можете захотеть сэкономить несколько нажатий клавиш, изменить эту строку на двойные в кавычках и интерполировать переменные - т.е. "blah blah $some_var foo foo" совпадает с 'blah blah ' . $some_var . ' foo foo'

3 голосов
/ 30 мая 2011

Хотя я полностью согласен с mysql_real_escape_string() комментариями, похоже, что вы забыли заключить URL в кавычки, как и любая другая строка.

$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , "'.$url.'" ,"some string" )';

Вы можетерасскажите, посмотрев на ошибку MySQL:

://www.youtube.com/watch?v=sAYc3gGjYW8 ,"some string" )

В конце URL нет кавычек:)

2 голосов
/ 30 мая 2011

Вы должны избежать ввода. Взгляните на mysql_real_escape_string или mysqli_real_escape_string. Вы также можете посмотреть на слой абстракции базы данных, например PDO .

Предполагается, что вы используете процедурные функции mysql_* и после подключения к базе данных ваш скрипт должен выглядеть следующим образом:

$sql = 'INSERT INTO table VALUES( '.$active.' , '.$id.' , '.$time.' , "'.mysql_real_escape_string($url).'" ,"some string" )';

Я также настоятельно рекомендую экранировать и другие значения:

$sql = 'INSERT INTO table VALUES( "'.mysql_real_escape_string($active).'" , "'.mysql_real_escape_string($id).'" , "'.mysql_real_escape_string($time).'" , "'.mysql_real_escape_string($url).'" ,"some string" )';

, если они не являются выражениями SQL или вы ранее их не экранировали.

1 голос
/ 30 мая 2011

Убедитесь, что вы экранировали все входы в БД, используя что-то вроде mysql_real_escape_string($string).Это не позволит вам быть открытым для атак с использованием SQL-инъекций и обеспечит правильное чтение строк.

0 голосов
/ 15 мая 2014

$id = $_GET['id'];$name = $_GET['name'];$lat = $_GET['lat'];$long = $_GET['long']; $query = mysql_query("INSERT INTO dbname.tablename ( ID , имя , * 1004 лат * длинный ) VALUES ('".$id."','".$name."','".$lat."','".$long."')");

...