MySQL sözdizimi hatası

6 Cevap php
$sql = "UPDATE galleries SET name='$name', desc='$desc', mainthumb='$mt' 
        WHERE id='$id'";

Bu bazı kahrolası nedenle bir hata atar. Ben öyle görmüyorum çünkü yol çok yorgun olması gerekir.

Ben tüm değerleri nakledilen teyit ettik. Daha da kötüsü, bu neredeyse kopyasını çalışıyor herhangi bir sorgu var.

Update:

Bu çözüldü. Bu azalan backticks yoktu aslında. Ben de önerdiği gibi yerine PDO kullanmak için gidiyorum.

6 Cevap

Azalan değil, bir sütun adı olarak kullanamazsınız bir anahtar kelime var mı?

Bir reserved word olan desc adında bir sütun, var. Bunu ters tırnakların ile teklif gerekecektir.

`desc`='$desc'

Did you sanitize all the parameters before mixing them with the sql statement?
desc is a reserved word in MySQL, you have to explicitly mark it as an identifier:

An identifier may be quoted or unquoted. If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it. [...]
The identifier quote character is the backtick (“`”):
$mysql = mysql_connect(...

$sql = "
    UPDATE
    	galleries
    SET
    	name='" . mysql_real_escape_string($_POST['name'], $mysql) . "',
    	`desc`='" . mysql_real_escape_string($_POST['desc'], $mysql) . "',
    	mainthumb='"  . mysql_real_escape_string($_POST['mt'], $mysql) . "' 
  WHERE
    id='"  . mysql_real_escape_string($_POST['id'], $mysql) . "'
 ";

hatta daha iyi: use prepared statements

echo $sql ve aslında ne hale geldiğini görüyoruz. Bunu hallettim sürece, SQL enjeksiyon için kolay bir hedef gibi görünüyor.

evet, örneğin mysql_real_escape_string kullanarak, emin ilk verileri sterilize olun.

Sonra (mysql_error()) size hata olduğu için daha fazla ipuçları verecektir mysql hatası echo;

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");

mysql_select_db("nonexistentdb", $link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

mysql_select_db("kossu", $link);
mysql_query("SELECT * FROM nonexistenttable", $link);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
?>
$sql = "UPDATE `galleries` SET 
           name='".$name."', 
           desc='".$desc."', 
           mainthumb='".$mt."' 
        WHERE id='".$id."'";

Bu onu işlemek için bir alternatif yol olabilir. VolkerK önerdi ben PDO'yu gitmiş olsa da. Ben de de çıktı ne olacağını görmek için Echo olacaktır. Ben önerdi aynı zamanda, Desc bir rezerv kelime olabilir.