2009-12-12 3 views
0
$sql = "UPDATE galleries SET name='$name', desc='$desc', mainthumb='$mt' 
     WHERE id='$id'"; 

일부 사소한 이유로 오류가 발생합니다. 나는 그것을 보지 않기 때문에 너무 피곤할 것임에 틀림 없다.MySQL 구문 오류

모든 값이 게시되고 있음을 확인했습니다. 더 나쁜 것은, 거의 정확하게 작동하는 쿼리입니다.

업데이트 :이 해결되었습니다

. desc에는 backticks가 없다는 것이 사실입니다. 나는 또한 PDO를 제안대로 사용하려고합니다.

답변

7

열 이름으로 사용할 수없는 키워드가 아닙니다.

+0

방금''SELECT desc FROM Table1'은 실패했지만 성공했다고 인용했습니다. –

+3

사실입니다. http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html -이 예약어 중 많은 (모두?)를 사용하면 열 이름을 역 따옴표로 묶을 수 있습니다 어쨌든 imho하고있다) 잘 작동합니다. –

+0

고맙습니다, 바로 그게 문제였습니다. 내가 그것을 썼을 때 그것은 나에게 일어나지 않았다. 주입에 관해서는, 이것은 문제를 발견하는 동안 나는 버려진 버전입니다. – RedElement

1

echo $sql 실제로 확인하십시오. SQL 인젝션을 쉽게 처리 할 수있는 대상으로 보입니다.

7

desc이라는 열이 있으며 reserved word입니다. 당신은 역 인용 부호로 그것을 인용해야 할 것입니다.

`desc`='$desc' 
0

예, 먼저 mysql_real_escape_string을 사용하여 데이터를 처음으로 살균하십시오.

그런 다음 오류가있는 곳에 대한 자세한 힌트를 제공하는 mysql 오류 (mysql_error())를 반향하십시오.

<?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"; 
?> 
4

당신은 sanitize all the parameters을 SQL 문과 혼합하기 전에 했습니까?

식별자가 인용 또는 인용 부호가 될 수있다
desc 명시 적 mark it as an identifier해야하는 reserved word in MySQL입니다. 식별자에 특수 문자가 있거나 예약어 인 경우 참조 할 때마다 인용 부호로 묶어야합니다.
$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) . "' 
"; 

또는 더 나은 : use prepared statements

+0

+1 및 mysqli. –

+1

acutally 마음에 pdo가있다 ;-) 링크가 추가되었습니다. – VolkerK

0
$sql = "UPDATE `galleries` SET 
      name='".$name."', 
      desc='".$desc."', 
      mainthumb='".$mt."' 
     WHERE id='".$id."'"; 

이 그것을 처리 할 수있는 하나 개의 대안 방법이 될 수있다 [...]
식별자 인용 문자는 백틱는 (" '")입니다. VolkerK가 제안한 것처럼 나는 PDO로 갔다. 나는 또한 그것이 출력 할 것 인 것을 알기 위해 Echo를 할 것이다. 또한 Ben이 제안한대로 Desc는 예약어 일 수 있습니다.