Php SQL hata

5 Cevap php

Hey, ben veritabanından bazı bilgileri ayıklamak ve $ _COOKIE verilerini bir araya geldi olmadığını görmek için kontrol için bazı kodlar yazdım. Ama hata mesajı alıyorum:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Benim kod şimdiye kadar:

$con = mysql_connect("XXXX","XXXXX","XXXXXXX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("XXXXXX", $con);
$id = $_COOKIE['id']; 
$ends = $_COOKIE['ends'];
$userid = strtolower($_SESSION['username']);
$queryString = $_GET['information_from_http_address'];
$query = "SELECT * FROM XXXXX"; 
$result = mysql_query($query) or die(mysql_error());
  while($row = mysql_fetch_array($result)){
    if ($queryString == $row["orderid"]){
       $sql="UPDATE members SET orderid = ''WHERE (id = $id)";
       $sql="UPDATE members SET level = 'X'WHERE (id = $id)";
       $sql="UPDATE members SET payment = 'XXXX'WHERE (id = $id)";
       $sql="UPDATE members SET ends = '$ends'WHERE (id = $id)";
       if (!mysql_query($sql))
        {
            die('Error: ' . mysql_error());
        }
    }
  }

Any help would be appreciated, Thanks.

5 Cevap

$sql="UPDATE members SET ends = '$ends'WHERE (id = $id)";

olmalıdır

$sql="UPDATE members SET ends = '$ends'WHERE (id = '$id')";

(IE 'etrafında $ id ekleyin)

Ben bu hata olup olmadığından emin değilim, ama sen kodu olduğunu fark yoktur sadece son güncelleme çalışır? Sen $sql 4 defa atama ve sadece dördüncü assignement sonra bitiyor ...

$ _COOKIE ['Id'] bir değeri yoksa, o zaman SQL tablolarına $ id bu gibi görünen SQL bırakarak, boş olacaktır:

UPDATE members SET ends = 'something' WHERE (id = )

hangi tabii ki, geçersiz SQL olduğunu.

Sadece bir SQL tabloların yürüteceğini ve bu sonuncusu. Bu gibi WHERE fıkrasında önce bazı boşluk eklemek gerekir:

$sql="UPDATE members SET ends = '$ends' WHERE (id = $id)";

Ayrıca çerez son kullanıcı tarafından değiştirilmiş durumunda SQL enjeksiyon saldırıları dikkatli olun. Notun bir diğer şey orderid sütundur. Bir VARCHAR veya başka bir benzersiz tanımlayıcı mı? Bir tamsayı ise, o boş dize ayarı çalışmaz. Sen biraz burada şema yeniden düşünmek isteyebilirsiniz.

EDIT: yapmanız gereken başka bir şey kurabiye aslında değerlere sahip emin olmak için kontrol edin. Eğer değilse, SQL dizeleri berbat olacak. Kullanma hakkında parameterized queries through PDO bu yüzden de tüm SQL enjeksiyonu konusunda endişelenmenize gerek yok ama sen var?

Eğer üzerine yazma tutmak her şeyden önce $ sql değişken yüzden sadece

$sql="UPDATE members SET ends = '$ends'WHERE (id = $id)";

idam ediliyor.

Ve ben bu $ id değişkeni bunu id olmadan yukarıdaki gibi sorgu gibi belki boş (olduğunu düşünüyorum ne değildir söyleyebilirim:

$sql="UPDATE members SET ends = '$ends'WHERE (id = )";

tekrar böyle bir hata atmak olacaktır.

Denemek

$id = NULL;

önce

$id = $_COOKIE['id'];

Hata gitti eğer $ id düşündüğün değil ne demektir