Когда в запросе на вставку содержится цитата (например, Kellog's
), она не может вставить запись.
ОШИБКА MSG:
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 's', 'Corn Flakes 170g', '$ 15.90', '$ 15.90', '$ 14.10', '-') 'на линии Ошибка обновления 1MySQL:
Первый 's'
, должен быть Kellogg's
.
Есть ли решение?
Побег цитаты с обратной косой чертой. Как 'Kellogg\'s'
.
Вот ваша функция, используя mysql_real_escape_string
:
function insert($database, $table, $data_array) { // Connect to MySQL server and select database $mysql_connect = connect_to_database(); mysql_select_db ($database, $mysql_connect); // Create column and data values for SQL command foreach ($data_array as $key => $value) { $tmp_col[] = $key; $tmp_dat[] = "'".mysql_real_escape_string($value)."'"; // <-- escape against SQL injections } $columns = join(',', $tmp_col); $data = join(',', $tmp_dat); // Create and execute SQL command $sql = 'INSERT INTO '.$table.'('.$columns.')VALUES('. $data.')'; $result = mysql_query($sql, $mysql_connect); // Report SQL error, if one occured, otherwise return result if(!$result) { echo 'MySQL Update Error: '.mysql_error($mysql_connect); $result = ''; } else { return $result; } }
Вы должны передать переменную или данные внутри mysql_real_escape_string(trim($val))
, где $val
– это данные, по которым вы получаете ошибку.
Если вы введете текст, то есть «Я люблю Kellog's», у нас есть '
строка», поэтому он сломает запрос. Чтобы этого избежать, вам нужно хранить данные в переменной вроде этого $val = "I love Kellog's"
.
Теперь это должно работать:
$goodval = mysql_real_escape_string(trim($val));
Замените mysql
на mysqli
. Использовать это
mysqli_real_escape_string($connection,$_POST['Description'])
Вам нужно избежать апострофа (то есть сказать SQL, что апостроф должен восприниматься буквально, а не как начало или конец строки) с помощью \.
Добавьте a до апострофа в Kellogg's, давая вам Kellogg's.
В стандартном SQL вы используете две одинарные кавычки для указания одной отдельной цитаты, следовательно:
INSERT INTO SingleColumn(SingleChar) VALUES('''');
Первая цитата открывает строку; вторая и третья – одинарная кавычка; и четвертый завершает строку. В MySQL вы также можете использовать обратную косую черту:
INSERT INTO SingleColumn(SingleChar) VALUES('\'');
Итак, в вашем примере один или оба из них должны работать:
INSERT INTO UnidentifiedTable VALUES('Kellog''s', 'Corn Flakes 170g', '$ 15.90', '$ 15.90', '$ 14.10', '--'); INSERT INTO UnidentifiedTable VALUES('Kellog\'s', 'Corn Flakes 170g', '$ 15.90', '$ 15.90', '$ 14.10', '--');
В PHP существует функция для дезинфекции пользовательских данных ( mysql_real_escape_string ), прежде чем вставлять их в SQL-запрос, или использовать метки-заполнители. Обратите внимание, что если вы не дезинфицируете свои данные, вы подвергаете себя атакам SQL Injection .
Пользователь этот.
mysql_real_escape_string(trim($val));
Вы также можете использовать функцию addslashes (), которая автоматически помещает \
before '
чтобы избежать ошибки
Оптимизирован для нескольких версий PHP
function mysql_prep($value){ $magic_quotes_active = get_magic_quotes_gpc(); $new_enough_php = function_exists("mysql_real_escape_string");//ie PHP>=v4.3.0 if($new_enough_php){//php v4.3.o or higher //undo any magic quote effects so mysql_real_escape_string( can do the work if($magic_quotes_active){ $value = stripslashes($value); } $value = mysql_real_escape_string(trim($value)); }else{//before php v4.3.0 //if magic quotes arn't already on, add slashes if(!$magic_quotes_active){ $value = addslashes($value); //if magic quotes are already on, shashes already exists } } return $value; }
Теперь просто используйте:
mysql_prep($_REQUEST['something'])