2016-06-09 14 views
-2

現在,我使用這個代碼:PDO:與「PHP 5.3」直接取第一個值

​​

使用:PHP 5.3

我需要重複很多次,是可以直接讀取該值沒有傳遞給$ req?

+0

你爲什麼不寫一個函數/方法呢? – Daan

+0

不在PHP 5.3上。但如果你升級到PHP 5.4,你可以使用數組去引用,並執行'$ dbh-> query($ sql) - > fetch()['filename']'。雖然我同意寫一個簡單的函數是有意義的。 – jszobody

+1

試試'echo $ req = $ dbh-> query($ sql) - > fetchColumn();' – Saty

回答

1

要獲得唯一的第一個值使用fetchColumn()代替fetch()因爲它只返回從結果的下一行一列設置

$sql = "SELECT filename FROM t_item where id=".$id; 
echo $dbh->query($sql)->fetchColumn(); 

更好地利用bindParam,以防止其形成sql注入

$sql = "SELECT filename FROM t_item where id= :id"; 
$stmt = $dbh->prepare($sql); 
$stmt->bindParam(':id', $id, PDO::PARAM_INT); 
$stmt->execute(); 
$stmt->fetchColumn(); 
+0

不是我的DV,而是[Little Bobby](http://bobby-tables.com/)說[你的腳本存在SQL注入攻擊的風險。]( http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –

+0

雅阿我知道,但OP要__fetch直接的價值,而不會傳遞給$ req__,因爲提到的問題是我不建議綁定和準備聲明的原因! – Saty

+1

您可以直接獲取並仍然準備@Saty。你懂的! –

-1

將這些例程封裝到一個函數中,您可以隨時在腳本中的任何位置調用函數,如下所示:

<?php 

     function getFilename($id){ 
      global $dbh; 
      $sql = "SELECT filename FROM t_item where id=".$id; 
      $file =$dbh->query($sql)->fetchColumn(); 
      return $file; 
     } 

     echo getFilename(2); // ECHOES THE FILENAME FOR THE ENTITY WITH ID=2 
+0

我喜歡這個答案除了一件事情 - [Little Bobby] (http://bobby-tables.com/)說[你的腳本存在SQL注入攻擊風險。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-在-PHP)。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! –