MySQL güncelleme komutunda hata.

8 Cevap php

Günaydın herkese,

Ben mysql verileri güncelleştirmek için php bir güncelleme komutunu kullanıyorum. Bu benim kodudur:

$sql=mysql_query("UPDATE blpublication SET JournalName = '$_POST[journal]', AcceptanceDate = '$_POST[acceptancedate]', PublishedDate = '$_POST[publisheddate]', Comment = '$_POST[comment]'
WHERE JobNo = '$_POST[jobno]'");

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "record Updated";

It does updates the field but, it gives me the following error. And i can not figure it out why am i getting this error. "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 '1' at line 1"

Eğer bana bu konuda yardımcı olabilir

Best Zeeshan

8 Cevap

Ne $sql ve tam çıkışı bize söyleyebilir misiniz? Orada arada, BIG güvenlik deliği. Sen always sorgu girdiler yani kaçmak gerekir:

$journal = mysql_real_escape_string($_POST['journal']);
$acceptance_date = mysql_real_escape_string($_POST['acceptancedate']);
$publish_date = mysql_real_escape_string($_POST['publisheddate']);
$comment = mysql_real_escape_string($_POST['comment']);
$job_no = intval($_POST['jobno']); // assuming jobNo is a number
$sql = <<<END
UPDATE blpublication
SET JournalName = '$journal',
AcceptanceDate = '$acceptance_date',
PublishedDate = '$publish_date',
Comment = '$comment'
WHERE JobNo = $jobno
END;
mysql_query($sql);
if (mysql_error()) {
  die("Error executing query '$sql': " . mysql_error());
}
echo "record Updated";

Ben ilk girdileri olacaktır. Bu, size experincing ve kötü niyetli saldırılar ne kadar bazı çok kötü hatalara yol açabilir. Look up SQL Injection.

Ben sorun kez mysql_query çalıştırıyorsanız olduğunu düşünüyorum. Çalıştığını ve $ sql atamak, hangi 1 (true) döner ilk kez. Sonra (1 eşittir) $ sql geçen, yine mysql_query diyoruz. Tabii ki, "1" geçerli bir SQL sorgusu değil, bu yüzden sözdizimi hatası alıyorum.

Ben bütün kalbiyle bu girdileri filtrelemelidir katılıyorum!

Benzer post, i herhangi bir nesne ya da dizi sözdizimi var, sen parantez koymak gerektiğine inanıyorum aşağıdaki.

SET JournalName = '${_POST[journal]}'

edit: ve evet, diğerleri sql enjeksiyon riske işaret gibi.

Her şeyden önce, sizin kod SQL injection, sizin POST değerlerini kaçmak eğilimli:

$journal = mysql_real_escape_string($_POST['journal']);

Ve aslında sorgu hata ayıklamak için, biz sorguyu kendisi gerekir. Sorgunun gerçek yürütme önce echo () deyimi ekleyin ve sonucu yazı, POST değerleri belki bazı beklenmeyen bir değer içerir.

Sizin genel GÜNCELLEME sözdizimi bariz enjeksiyon olanakları dışında, Tamam görünüyor, ama çıkış $ sql gerekir. Lütfen değişkenlerden biri muhtemelen bir teklif veya bunun gibi diğer bazı sorunu var ....

SQL kodunuzun UPDATE deyimi baktığımızda, bir şey beni dışarı atlıyor. Tablo adı blpublication, belki bir 't', yani eksik olan tblpublication?

Ayrıca gerçekten aksi bir SQL injection attack kurbanı olmak için gidiyoruz, sizin girdileri gerekir.

$ _POST Değerleri bitiştirme'yi deneyin. Tuşuna alıntı olmadan bunları içeren mümkün olup olmadığından emin değil im?

$sql= mysql_real_escape_string("UPDATE blpublication SET JournalName = '".$_POST['journal']."', AcceptanceDate = '".$_POST['acceptancedate']."', PublishedDate = '".$_POST['publisheddate']."', Comment = '".$_POST['comment']."'
WHERE JobNo = '".$_POST['jobno']."'");
$result = mysql_query($sql);

Not: mysql_ * komutları amortismana tabi tutulmaktadır. Sen mysqli_* üzerinden geçmelisiniz.