2010-10-26 127 views
0

格式時遇到問題我的代碼使用的sprintf()沒有錯誤執行當我運行代碼,我得到這個錯誤:解析錯誤:語法錯誤,意想不到的T_VARIABLE在/位置上線16的sprintf()對戰的mysql_query()

$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = '$q'', $tablename); 

上面是我的代碼中的第16行。我假設它是語法相關的。

我現在收到以下錯誤:

致命錯誤:未捕獲的異常「PDOException」有消息「SQLSTATE [42000]:語法錯誤或訪問衝突:1065查詢爲空」在/ home /內容/ 63 /6563663/html/inventory/pg.php:19堆棧跟蹤:#0 /home/content/63/6563663/html/inventory/pg.php(19):PDOStatement-> execute()#1 {main}拋出/home/content/63/6563663/html/inventory/pg.php第19行

這是我的整個代碼塊:

<?php 

$u=$_GET["u"]; 

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form2")) { 
$amount = isset($_POST['amount']) ? $_POST['amount'] : null; 
if (null != $amount) { 

$user = 'username'; 
$pass = 'password'; 
$pdo = new PDO('mysql:localhost', $user, $pass); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
session_start(); 
$tablename = $_SESSION['MM_Username']; 
$query = sprintf('UPDATE %s SET stock= :amount WHERE itemname= '.$u, $tablename); 
$stmt = $pdo->prepare($UpdateQuery); 
$stmt->bindParam('amount', $amount); 
$stmt->execute(); 
} 
} 

?> 

謝謝你,似乎我的錯誤是處理PDO執行,而不是查詢本身。如果任何人有任何想法,這將是偉大的。艾倫,我用你的方法引用,並通過mysql_real_escape_string()運行查詢。

+0

你有一個語法錯誤:您需要逃避你的單引號。'\''$ q'從哪裏來?這是正確的'mysql_real_escape_string()'編? – 2010-10-26 19:15:53

+0

$ q只是我的代碼塊中定義的一個簡單字符串。 – Parker 2010-10-26 19:18:11

+0

我很好奇,看看錶名是否被反引號內的單引號括起來。你能否在執行前更新問題以包含查詢打印輸出? – 2010-10-26 19:21:25

回答

0

試試這個:

$query = sprintf('UPDATE%S SET股票= :amount WHERE ITEMNAME = '.$q, $tablename);

你需要把字符串和變量之間的連接運算符將它們組合在一起。你也可以在$q之後擺脫'',因爲它根本不會改變字符串。

編輯:

我相信我誤解了你正在嘗試做的事情。試試這個:

$query = sprintf("UPDATE%S SET股票= :amount WHERE ITEMNAME = '$q'", $tablename);

通過改變你的PHP字符串是雙引號內,你不需要逃避你的單引號和$ Q將擴大到它的價值。

此外,請確保您通過mysql_real_escape_string()運行$ q和$ tablename以防止SQL注入。

0

像這樣:

$query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'', $tablename); 

$query = sprintf("UPDATE `%s` SET `stock` = :amount WHERE `itemname` = \'$q\'", $tablename); 

你不能有轉義' S IN通過'分隔字符串。要麼在"分隔的字符串中未轉義" s。要轉義字符串分隔符,您需要預先配置一個\字符。