【问题标题】:How to use PDO to fetch data如何使用 PDO 获取数据
【发布时间】:2015-12-24 10:06:28
【问题描述】:

以下是详细信息: 1. PDO连接类,具有与DB连接的功能。说 PDO_connect 类。 2. 逻辑类文件说MyLogic文件,MyLogic文件包括PDO_connect和另一个写函数的类说MyFunction Class。

问题: 我无法使用以下查询执行选择查询和获取对象。 MyFunction 类有功能:

function gCD($query_type,$connection_obj,$u_id,$c_id)
{
    if($query_type == 'SELECT')
    {
        $prepare_sql = $connection_obj->prepare("SELECT c_n from cs where u_id=:u_id and c_id=:c_id");
        $query_select_clients = $prepare_sql->execute(array(':u_id'=>$u_id,':c_id'=>$c_id));
        echo "\n".$prepare_sql->rowCount();
        exit; //This is also not working.
        $g_c_obj = $prepare_sql->fetch(PDO::FETCH_OBJ);
        var_dump($g_c_obj);
      }
}

所有参数都从 MyLogic 文件、连接和其他详细信息传递。 如果我进行此调试,它会返回 true:

var_dump($prepare_sql->execute(array(':u_id'=>$u_id,':c_id'=>$c_id)))

但是rowCount()fetch() 都没有给出任何输出。您的帮助非常宝贵。

【问题讨论】:

  • 尝试从 phpmyadmin 对数据库执行查询。它是否返回任何值?
  • 是的,它在 DB 上执行时提供 2 行作为输出。
  • 你必须自己做一些其他的测试。你能创建一个php file,只有连接和一个代码来选择这个值并绑定参数吗?另外,如果您将此查询替换为值并在不需要绑定它们的情况下运行会发生什么?
  • 您还应该检查调用fetch 的结果。调用成功了吗?您还可以在 MySQL 常规日志中检查这些调用。参数是否符合您的预期?
  • 来自PDOStatement::rowCount() 的手册:“如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,这种行为是不能保证适用于所有数据库,并且不应依赖于可移植应用程序。"

标签: php mysql pdo


【解决方案1】:

此信息太长,无法发表评论,因此我输入此信息作为帮助调试您的案例的答案。

在使用 PDO 功能时测试每个案例。 prepareexecutefetch 等每个功能都有一个返回值。捕获返回值,对其进行分析并根据返回值采取行动。在适当的地方替换你的信息,看看你的执行路径在哪里停止。

<?php
$db = new PDO('mysql:host=localhost;dbname=xyz', 'user', 'pass');

gCD('SELECT', $db, 2, 2);

function gCD($query_type,$connection_obj,$u_id,$c_id)
{
    if($query_type == 'SELECT')
    {
        try
        {
            $prepare_sql = $connection_obj->prepare("SELECT c_n from cs where u_id=:u_id and c_id=:c_id");
            if ($prepare_sql === false)
            {
                echo "PDO prepare failed\n";
                return false;
            }
            $query_select_clients = $prepare_sql->execute(array(':u_id'=>$u_id,':c_id'=>$c_id));
            if ($query_select_clients === false)
            {
                echo "PDO execute failed\n";
                return false;
            }
            echo "\n".$prepare_sql->rowCount();
            $g_c_obj = $prepare_sql->fetch(PDO::FETCH_OBJ);
            if ($g_c_obj === false)
            {
                echo "PDO fetch failed\n";
                return false;
            }
            var_dump($g_c_obj);
            return true;
        }
        catch (Exception $e)
        {
            echo 'Exception: ', $e->getMessage(), "\n";
        }
    }
    else
    {
        echo 'Not a select statement', "\n";
    }
    return false;
}
?>

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多