2012-06-09 45 views
0

可能重複:
PHP PDO bindValue in LIMITPDO:無法通過可變準備

$number=8; 
    try { 
     $topics=$dbh->prepare("SELECT * FROM topictable ORDER BY RAND() LIMIT ?"); 
     $topics->execute(array($number));  
     $topicarray = $topics->fetch(PDO::FETCH_BOTH); 
     print_r($topicarray); 
    } 
    catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 

以上是我的代碼,我知道這個問題來自$topics=$dbh->prepare("SELECT * FROM topictable ORDER BY RAND() LIMIT ?"),因爲當我改變?到8,它的作品。請賜教。謝謝。

+1

因爲不能以這種方式設置「LIMIT」。此外,你的SQL根目錄中有更大的問題:[閱讀更多](http://stackoverflow.com/a/9946238/727208) –

+0

@tereško感謝您的文章。但是,有沒有一種合適的方法來通過數字來限制PDO? –

+0

嘿@tereško,我修改了你給出的代碼,並最終出現了一些新問題。你介意來[在這裏幫我一下嗎?](http://stackoverflow.com/questions/10963941/sql-getting-8-distinct-random-row-from-a-table-with-two-columns ) –

回答

1
$topics=$dbh->prepare("...LIMIT :limit"); 
$topics->bindValue(':limit', intval($number), PDO::PARAM_INT); 
$topics->execute(); 
+0

如果你將它綁定爲'PDO :: PARAM_INT' –

+0

https://bugs.php.net/bug.php?id=44639你不需要施加任何值,PDO仍然可以作爲將它轉換爲串。最好確定它是第一個int。 – MikeCruz13

+0

「這隻發生在仿真參數綁定上,即,當PDO :: ATTR_EMULATE_PREPARES爲TRUE時。」如果您不知道如何正確使用PDO,也許您應該閱讀教程。沒有半腦的人正在使用模擬準備。 –