PHP PDO 转换

标签 php mysql pdo

我正在将 PDO 合并到我的代码中,但我发现很难完成我之前轻松完成的相同任务。我觉得我可能会错过一些东西。有人可以对以下代码提供一些指导吗?

首先,我将以下函数转换为使用 PDO:

public function fetchBgnew($whr, $limit){

            $db = Core::getInstance();              
            $res = $db->dbh->prepare("SELECT p.id,p.bg,p.bg_desc,p.bg_id,p.user_id, p.pl_id,p.domainurl,p.type,p.price FROM ".USERS_BG." as p left join ".USERS." as u on p.user_id=u.id WHERE u.status !=0 and :whr :limit");
            $res->execute(array(':whr'=>$whr,':limit'=>$limit));                
            $res->fetchAll(PDO::FETCH_ASSOC);

            $cnt = $db->dbh->prepare("SELECT p.id FROM ".USERS_BG." as p left join ".USERS." as u on p.user_id=u.id WHERE u.status !=0 and :whr");
            $cnt->execute(array(':whr'=>$whr));             
            $cnt->rowCount();


            return $result = array("data"=>$res, "count"=>$cnt);
        }

其次,我想调用该函数,但是我之前使用的代码采用了整个字符串语句,如下所示:

  $bgdataarr = $bgObj->fetchBgnew(" p.pl_id IN (".@implode(',',$barr).") and p.status =1 order by p.id desc", " LIMIT $limit_start,$page_records");

我已经使用 PDO 大约 3 天了,我的印象是你无法传递一个字符串语句来准备,或者至少我不知道如何做。

1.转换第二个函数调用的正确方法是什么?

2.是否可以将函数转换为能够像以前一样传递我想要的任何参数?

最佳答案

正如评论中提到的,您不能采用包含列:值对的数组并将其作为 PDOStatement 参数传递。

您需要做的是动态创建整个语句。

假设您有以下数组:

$whr = array('username' => '12345', 'password' => 'lorem ipsum');

您的声明如下所示:

$stmt = $pdo->prepare("SELECT * FROM users WHERE :whr");

将数组绑定(bind)到参数将产生无效的 SQL(假设您内爆了数组,因此其结果是一个字符串)。

您要做的就是动态创建整个语句。

$query[] = "SELECT * FROM users WHERE";

foreach($whr as $column => $value)
{
    $query[] = "$column = :$column";
}

$stmt = $pdo->prepare(implode(' AND ', $query));

// Naturally, you'll have to bind parameters somehow as well
foreach($whr as $column => $value)
{
    $stmt->bindValue($column, $value);
}

$stmt->execute();

关于PHP PDO 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841886/

相关文章:

php - 调用数据库的子集,如何在数据库末尾循环记录 1

php - phpseclib连接过早关闭

PHP PDO 在连接到 MySQL 服务器失败时隐藏错误消息

php - 如何从MySQL数据库列中自动选取最近3年的数据?

php - 如何在php/mysql中使用事务

php - MYSQL 不返回不同年份日期之间的结果

C# - 将第一列从文本文件插入数据库

php - 如果最后一个查询有评论,我的查询就不起作用。

php - Yii:如何在 View 中格式化日期时间并按年份搜索

php - 变量内变量中的 SQL 代码