MySQL синтаксическая проблема - PullRequest
0 голосов
/ 04 мая 2009

Я пытаюсь отобразить информацию из строки mysql на этой странице. Я использую $ _GET, потому что идентификатор включен в ссылку на страницу: www.example.com/page.php?id=1, но возвращает эту ошибку:

Ошибка: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '=' 1 '' в строке 1

Кто-нибудь знает, как это исправить?

код ниже:

<?php

    $username="xxx";
    $password="xxx";
    $database="xxx";
    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");


include 'library/config.php';
include 'library/opendb.php';

if(isset($_GET['id']))
{
   $query  = "SELECT id, title, content, contactname, contactemail, contactnumber ".
             "FROM vacancies".
             "WHERE id = '{$_GET['id']}'";
   $result = mysql_query($query) or die('Error : ' . mysql_error());
   list($id, $title, $content, $contactname, $contactemail, $contactnumber) = mysql_fetch_array($result, MYSQL_NUM);

   $content = htmlspecialchars($content);
}

if(isset($_POST['update']))
{
   $id = $_POST['id'];
   $title   = $_POST['title'];
   $content = $_POST['content'];
   $contactname = $_POST['contactname'];
   $contactemail = $_POST['contactemail'];
   $contactnumber = $_POST['contactnumber'];

   if(!get_magic_quotes_gpc())
   {
      $title   = addslashes($title);
      $content = addslashes($content);
      $contactname = addslashes($contactname);
      $contactemail = addslashes($contactemail);
      $contactnumber = addslashes($contactnumber);
   }

   // update the article in the database
   $query = "UPDATE vacancies
            SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber'".
        "WHERE id = '$id'";
   mysql_query($query) or die('Error : ' . mysql_error());

   // then remove the cached file
   $cacheDir = dirname(__FILE__) . '/cache/';
   $cacheFile = $cacheDir . '_' . $_GET['id'] . '.html';

   @unlink($cacheFile);

   // and remove the index.html too because the file list
   // is changed
   @unlink($cacheDir . 'index.html');

   echo "<b>Job Entry: '$title' updated</b>";

   // now we will display $title & content
   // so strip out any slashes
      $title   = stripslashes($title);
      $content = stripslashes($content);
      $contactname = stripslashes($contactname);
      $contactemail = stripslashes($contactemail);
      $contactnumber = stripslashes($contactnumber);

}

include 'library/closedb.php';
?>

Ответы [ 4 ]

1 голос
/ 04 мая 2009

Выезд http://us2.php.net/manual/en/function.mysql-query.php

Проблема в том, что вы используете слишком много одинарных кавычек:

"WHERE id = '{$ _GET [' id ']}'";

и ваш запрос не работает должным образом. используйте вместо этого mysql_real_escape_string ().

0 голосов
/ 04 мая 2009

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

$query  = "SELECT id, title, content, contactname, contactemail, contactnumber ".
         "FROM vacancies ".
         "WHERE id = '".$_GET['id']."'";

Я всегда стараюсь не указывать переменные в своих строках, просто добавляю их с точками, и я нахожу, что это устраняет много путаницы.

0 голосов
/ 04 мая 2009

Удалить кавычки вокруг

 {$_GET['id']}

и

 $id

во всех ваших запросах.

Ваш идентификатор имеет тип integer, который, я полагаю, не может использовать версию в кавычках или пытается сопоставить ключ целого числа со строкой "1"

- Изменить эту строку

$result = mysql_query($query) or die('Error : ' . mysql_error());

до

$result = mysql_query($query) or die('Error : ' . mysql_error() . "\n\n" . $query);

Тогда вы можете точно увидеть, какой запрос поступает в БД. Который вы можете опубликовать здесь, чтобы мы могли видеть.

Также, пожалуйста, разместите

describe <tablename>;
0 голосов
/ 04 мая 2009

Одна проблема:

   $query = "UPDATE vacancies
            SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber'".
        "WHERE id = '$id'";

приводит к отсутствию пробела между последним столбцом и предложением WHERE. Измените его на:

   $query = "UPDATE vacancies
            SET title = '$title', content = '$content', contactname = '$contactname', contactemail = '$contactemail', contactnumber = '$contactnumber' ".
        "WHERE id = '$id'";

или мой предпочтительный формат:

$query = <<<END
UPDATE vacancies
SET title = '$title',
    content = '$content',
    contactname = '$contactname',
    contactemail = '$contactemail',
    contactnumber = '$contactnumber'
WHERE id = '$id'
END;

Примечание: Вы действительно должны экранировать поля, используя mysql_real_escape_string ().

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