2013-02-14 117 views
0
function db_execute($sql,$db,$array) 
{ 
    require(getcwd() . '/config/config.php'); 

    if (empty($array)) 
    { 
     $array = ""; 
     print "Something wrong"; 
    } 
    $connection = db_connect($db_host,$db_username,$db_password,$db); 
    $q = $connection->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 


    $q ->execute(array($array)); 

    if(!$q) 
    { 
     die("Error! " . $connection->errorInfo()); 
    } 

    $result = $q -> fetchAll(); 

    return $result; 
} 

$sql = "SELECT VALUE FROM users WHERE :id = :idnum"; 
$array = array(':id' => 'USER_ID', ':idnum' => '2'); 


printFormattedArray($array); 
printFormattedArray(db_execute($sql,"user_db",$array)); 

由於某種原因,我無法從此函數獲得任何結果以返回任何結果。但是,當我用PDO準備好的語句不返回結果

$sql = "SELECT VALUE FROM users WHERE USER_ID = 2"; 

替代查詢它給了我所需的結果。我究竟做錯了什麼?

+0

'printFormattedArray'後? – didierc 2013-02-14 05:29:52

+0

它以可讀格式打印數組的功能 – 2013-02-14 05:41:04

回答

1

基本上,你有2個選擇。

.1。避免在查詢中使用動態標識符。
所以,去你的第二個查詢。

$sql = "SELECT VALUE FROM users WHERE USER_ID = :idnum"; 
$array = array(':idnum' => '2'); 
$data = db_execute($sql, $array); 

.2。如果你需要動力的標識符,你需要爲他們的獨特佔位以及
所以,你的代碼會像

$sql = "SELECT VALUE FROM users WHERE ?n = ?i"; 
$data = db_execute($sql, 'USER_ID', 2); 

此外,

  • 從未查詢執行功能連接。連接一次,然後用打開的連接
  • 總是設置你的PDO報告MySQL的錯誤

添加此代碼連接

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

謝謝!這實際上解決了它! – 2013-02-14 05:40:36