Детали
Основной запрос MySQL "INSERT":
$startMonth = $date->getMonth();
$startDay = $date->getDay();
$startYear = $date->getYear();
$startTime = $date->getTime();
$query = sprintf("INSERT INTO todos
VALUES (startMonth, startDay, startYear, startTime)
VALUES (%d, %d, %d, %d)
WHERE todo = '%s'",
mysql_real_escape_string($startMonth),
mysql_real_escape_string($startDay),
mysql_real_escape_string($startYear),
mysql_real_escape_string($startTime),
mysql_real_escape_string($todo));
$result = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $q . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());
Вот mysql_error, который печатает:
Произошла ошибка MySQL.
Ваш запрос:
INSERT INTO todos SET startMonth = 6 И startDay = 27 И startYear = 2011 AND> startTime = 1309216538 WHERE todo = todo 2
Ошибка: (1064) У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с "WHERE todo = todo 2" в строке 1
Я пробовал все возможное, о чем я могу думать. Изменяя запрос на "INSERT INTO todos SET startMonth..." и т.д.
Я закодировал переменную $todo
всеми возможными способами (например, addslashes, magic_quotes_pgc (даже несмотря на то, что она устарела... я получал отчаяние), htmlentities, mysql_real_escape_string... все, что я мог найти и/или думать).
В соответствии с документацией MySQL вы не можете использовать предложение WHERE
в INSERT
. У вас также есть 2 предложения VALUES
. Похоже, что ваше первое предложение VALUES
определяет поля, которые вы вставляете, а не значения.
Если вы пытаетесь вставить INSERT
, то вы захотите сделать это:
$query = sprintf("INSERT INTO todos (todo, startMonth, startDay, startYear, startTime)
VALUES ('%s', %d, %d, %d, %d)",
mysql_real_escape_string($todo)
mysql_real_escape_string($startMonth),
mysql_real_escape_string($startDay),
mysql_real_escape_string($startYear),
mysql_real_escape_string($startTime));
INSERT INTO todos SET startMonth = 6 AND startDay = 27 AND startYear = 2011 AND >startTime = 1309216538 WHERE todo = todo 2
должно быть
UPDATE todos SET startMonth = 6, startDay = 27, startYear = 2011 WHERE startTime = 1309216538 AND todo = 2;
Вы путаетесь с правильным синтаксисом для оператора обновления. И является логическим оператором. Вы должны использовать запятые, когда присваиваете значение через инструкцию по обновлению. INSERT! = ОБНОВЛЕНИЕ.
Это, и есть некоторые другие сумасшедшие вещи, связанные с вашим выражением. В любом случае, второе утверждение должно работать до тех пор, пока правильное имя/схема
Помимо двух ошибок в INSERT
которые объяснил Франсуа, вы запускаете один ($query
) и печатаете другое ($q
):
$result = mysql_query($query) --- $query is not
or die("A MySQL error has occurred.<br />Your Query: " . $q --- same with $q
. "<br /> Error: (" . mysql_errno() . ") " . mysql_error());
$q
но ваш запрос хранится в$query