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));

出于某种原因,我无法从此函数中获得任何结果来返回任何结果。但是当我将查询替换为

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

它给了我所需的结果。我究竟做错了什么?

4

1 回答 1

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 );
于 2013-02-14T05:35:47.070 回答