【问题标题】:PDO Prepared statement returns no ResultsPDO Prepared 语句不返回任何结果
【发布时间】:2013-02-14 05:22:38
【问题描述】:
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";

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

【问题讨论】:

  • printFormattedArray?
  • 它是一个以可读格式打印数组的函数

标签: php mysql pdo parameter-passing


【解决方案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 );

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 2014-02-24
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多