Ошибка синтаксиса оператора PHP MySQL INSERT - PullRequest
1 голос
/ 09 января 2012

У меня проблемы с оператором INSERT, а ошибка только говорит:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Это совсем не полезно. Версия, которую я попробовал до сих пор и потерпела неудачу:

mysql_query("INSET INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')");

[само собой разумеется, что две напечатанные переменные показывают правильные значения] Я также пробовал версии без названия таблицы, с `or ', миллион комбинаций на самом деле и ничего не работает. Даже с константами или в разных таблицах. Он просто ничего не вставит никогда. Я проверил привилегии (я вхожу в систему с правами root), и все это включено.

Я пробовал похожие вещи на двух разных машинах с одним и тем же сервером (XAMPP 1.7.7), и это работает. Я полностью сбит с толку! Что это может быть?

Спасибо за ваше время!

Ответы [ 5 ]

4 голосов
/ 09 января 2012

Прежде всего, просто наберите INSERT правильно.

Использование _GET, как это действительно открывает вас для SQL INJECTIONS ...

Посмотрите на Подготовленные MySQL операторы .

Также считается хорошей практикой именовать столбцы, в которые вы вставляете данные.Это позволяет позже вставлять дополнительные столбцы и сохранять логику приложения.

INSERT INTO cos(rowName1, rowName2) VALUES(?, ?)

Где ? будет подготовленным оператором.

2 голосов
/ 09 января 2012

Правильно:

mysql_query("INSERT INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')");

Вы пытались передать ссылку $ на mysql_query?

Как:

mysql_query("INSERT INTO `cos` VALUES ('".$_GET['prod']."','".$_GET['page']."')", $link);

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

0 голосов
/ 09 января 2012

Попробуйте это:

$prod = $_GET['prod'];
$page = $_GET['page'];
mysql_insert("INSERT INTO 'cos' VALUES('$prod','$page)");

Это должно очень хорошо сделать это:)

0 голосов
/ 09 января 2012

сначала это вы используете INSET исправить это с помощью INSERT как

$pro = mysql_real_escape_string($_GET['prod']);
$page = mysql_real_escape_string($_GET['page']);
mysql_query("INSERT INTO `cos` (column1, column2)
             VALUES ('$pro', '$page')" );

вы забыли установить имена столбцов ...

0 голосов
/ 09 января 2012

Вы делаете это неправильно. Почему вы не избегаете ценностей? Документация Php.net предоставляет несколько хороших и безопасных рабочих примеров:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends 
    WHERE firstname='%s' AND lastname='%s'",
    mysql_real_escape_string($firstname),
    mysql_real_escape_string($lastname));

// Perform Query
$result = mysql_query($query);

Адаптировано к вашему коду:

$query = sprintf("INSERT INTO `cos` VALUES (%s, %s);", 
        mysql_real_escape_string($_GET['prod']),
        mysql_real_escape_string($_GET['page']));
$result = mysql_query($query);

Пожалуйста, всегда избегайте своих ценностей. И используйте INSERT, а не INSET:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...