2012-11-13 137 views
0

我遇到綁定參數或值的問題,有誰知道錯在哪裏? 如果我改變了?它的工作原理: - $bindParam PDO PHP

$item = 'area'; 
$query = dbConnectionPDO::getConnect()->prepare(' SELECT * FROM ? '); 
$query->bindParam(1, $item, PDO::PARAM_STR); 
$query->execute(); 

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){ 
    //// 
} 

這是一個很好的解決方案嗎?有用!

$select = 'select * from ' . $item . ' left join ' . $TableName . ' '; 

$query = dbConnectionPDO::getConnect()->prepare("$select ON :three = :four"); 
$query->bindValue(':three', $three, PDO::PARAM_STR); 
$query->bindValue(':four', $four, PDO::PARAM_STR); 
$query->execute(); 

while($resultId = $query->fetch(PDO::FETCH_ASSOC)){ 
    //// 
} 
+2

你試圖綁定一個表名,而不是參數。我不確定你是否可以這樣做。 –

+0

爲什麼要參數化表格以供選擇? – Esailija

回答

2

你試圖綁定一個表名,而不是參數。我不確定你是否可以這樣做。

bindParam作品結合問號持有人命名parmeters,而不是一個表名。

$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < ? AND colour = ?'); 
$sth->bindParam(1, $calories, PDO::PARAM_INT); 
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 

如果你只是尋找到佔位符「更新換代」你可以用sprintf,但要小心,因爲如果你會做什麼可疑的或愚蠢的(如從外部源接受表名),它可能是泄漏的。

例如:

$theQ = "SELECT * FROM `%s` LEFT JOIN `%s` ON `%s` = `%s`"; 
$runQ = sprintf($theQ, 'one', 'two', 'three', 'four'); 
+0

@所有,哈哈,這是問題,但有沒有解決方案。最後,我想這個$查詢= dbConnectionPDO :: getConnect() - >準備(「選擇*從:項左連接:表名ON:樹=:四」); – Bas

+0

你可以只sprintf的表名,但要小心,如果你正在做的事情腥:) $更改爲MyQuery =「SELECT * FROM'%s'」這可能是泄漏; mysql_query(sprintf($ myQuery,「myTable」)); –

+0

用一個簡單的參數佔位示例編輯。 –

0

你不能參數化表名,只有參數。

1

您需要提供只有文字的參數化有效的SQL語句。即使數據庫驅動程序足夠愚蠢以接受查詢,你最終會執行類似於:

SELECT * FROM 'area' 

......這顯然不是你想要的。