PHP + MYSQL: Güncelleştirme sorgusu ile ilgili sorun

4 Cevap php

Ben bu sorguyu çalıştırırken sorun yaşıyorum. Ben hata almaya devam:

Eğer SQL sözdizimi bir hata var; yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol edin 'okundu =' readd 'WHERE User_id = '1' at line 1 LIMIT 1 '

The code

 $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
	mysql_select_db('main') or die(mysql_error());

 $read = "message read";

 $set_statuss = "UPDATE inbox ".
			"SET read = '".$read."' ".
			"WHERE user_id = '".$_SESSION['user_id']."' ".
			"LIMIT 1";

Düzenleme: Bu tablo:

 CREATE TABLE `inbox` (
 `inbox_id` int(5) NOT NULL auto_increment,
 `posted_to` int(5) NOT NULL,
 `posted_by` int(5) NOT NULL,
 `subject` text NOT NULL,
 `message` text NOT NULL,
 `date_posted` datetime NOT NULL,
 `read` text NOT NULL,
 PRIMARY KEY  (`inbox_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Edit: sorgu Güncelleme, ama şimdi PHP gibi beyaz görünüyorsa ..

 $read = "read";

 $set_statuss = "UPDATE inbox ".
			"SET read = '".$read."' ".
			"WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";

 mysql_query($set_statuss) or die(mysql_error() . $set_statuss);

Ve adres çubuğuna url:

 http://localhost:8888/wmin/msg.php?user_id=1&msg_id=2

Ben yanlış gidiyorum nereye kimse görüyor mu? Teşekkürler!

4 Cevap

Ben (;-) yüzden markdown dilinde ifade etmek zor effing çevresinde `` backquotes kullanarak, yani, onu stropping denemek, bir anahtar kelime olarak read alıyor olabilir düşünüyorum.

Bir kere, bu bir heredoc kullanıldığında eğer kod okumayı kolaylaştırmak istiyorum. Başka için, neden 1 satır için bu sınırlama vardır? Nasıl sizin güncelliyoruz hangi satır biliyor musunuz?

Sen mysql_query() tam olarak neyin yanlış gittiğini görmek için çağrı hataları rapor etmelisiniz. I-$_SESSION['user_id'], bir dizi olduğunu varsayalım? O tanımlı değilse sorgu oturum ve / veya hatası and SQL rapor gerektiğini neden olan, başarısız olur.

$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
mysql_select_db('main') or die(mysql_error());

$read = "message read";
$sql = <<<END
UPDATE inbox
SET read = `$read`
WHERE user_id = $_SESSION[user_id]
END;
mysql_query($sql) or die(mysql_error() . ': ' . $sql);

Güvenlik amacıyla Seni parametre geçmek için sprintf fonksiyonunu kullanmanızı öneririz.

$q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1",
                    $read, $_SESSION['user_id']);

Hey çocuklar neyin yanlış olduğunu anladım:

 $read = "message read";

 $set_statuss = "UPDATE inbox ".
            "SET readd = '".$read."' ".
            // changed $_SESSION to $_GET and the ';' after msg_id GET 
            "WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";

 mysql_query($set_statuss) or die(mysql_error() . $set_statuss);

Herkese teşekkürler!