mysql sözdizimi sorun

4 Cevap php

Bu sayfada bir mysql satırdan bilgi görüntülemek için çalışıyorum. Id sayfaya bağlantı dahildir çünkü, $ _GET kullanıyorum: www.example.com/page.php?id=1 ama bu hatayı döndürür:

Hata: SQL sözdizimi bir hata var; line 1 yakınlarındaki '= '1'' kullanmak için doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol

Herkes bu nasıl düzeltmek için biliyor mu?

Aşağıdaki kodu:

<?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 Cevap

Bu deneyin:

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

Ben her zaman benim dizeleri dışında değişkenleri bırakmak için deneyin sadece dönemlerde onları eklemek, ben kargaşasına ortadan kaldırır bulabilirsiniz.

Çıkış http://us2.php.net/manual/en/function.mysql-query.php

Sorun burada çok tek tırnak kullanıyor olmasıdır:

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

beklendiği gibi ve sorgu hareket değildir. yerine mysql_real_escape_string () kullanın.

Tek sorun:

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

son sütun ve WHERE yan tümcesi arasında hiçbir boşluk sonuçları. Bunu değiştirin:

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

ya da benim tercih biçimi:

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

Note: Gerçekten) (mysql_real_escape_string kullanarak alanları kaçmak gerekir.

Etrafında tırnak çıkarın

 {$_GET['id']}

ve

 $id

tüm sorgularda.

Sizin id bir alıntı sürümünü alamaz ki, sanıyorum türü tamsayı ya da dize "1" tam sayı anahtarını eşleştirmeye çalışır

-- Change this line

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

karşı

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

Then you can see exactly what query is going inkarşı the DB. Which you can then post here for us karşı see.

Ayrıca yayınlayın lütfen bir

describe <tablename>;