【问题标题】:PDO query not selecting data from one table onlyPDO 查询不只从一个表中选择数据
【发布时间】:2016-04-29 05:21:45
【问题描述】:

我的 PDO 查询不是只从一个表中选择数据,所有其他表都可以正常工作。

选择查询:

<?php
header('Content-type: application/json');
require_once 'class.user.php';
$user_home = new USER();

$user_id = $_SESSION['userSession'];

$profile = $user_home->runQuery("SELECT * FROM user_profiles");
$profile->execute(array(":user_id"=>$user_id));
$profile_info = $profile->fetchAll(PDO::FETCH_ASSOC);

echo json_encode(array("profile_info" => $profile_info));
?>

如果我将选择更改为:$profile = $user_home-&gt;runQuery("SELECT * FROM tbl_users");

效果很好。

数据库连接:

<?php
session_start();
class Database
{

    private $host = "localhost";
    private $db_name = "hoidja";
    private $username = "root";
    private $password = "";
    public $conn;

    public function dbConnection()
    {

        $this->conn = null;    
        try
        {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        }
        catch(PDOException $exception)
        {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}
?>

这是我要查询的表:

这是唯一一个不选择任何数据的表(有 3 行)。 可能是什么原因?

【问题讨论】:

  • run_query function 是做什么的?
  • runQuery 是公共函数 runQuery($sql) { $stmt = $this->conn->prepare($sql);返回 $stmt; }
  • so die and dump runQuery 回复,看看你得到了什么
  • var_dump 显示如下:
     D:\Programs\wamp\www\Hoidja.ee\PHP\class.user .php:19: object(PDOStatement)[2] public 'queryString' => string 'SELECT * FROM user_profiles' (length=27) 

标签: php mysql pdo


【解决方案1】:

忘记写where clause

您的查询将是

SELECT * FROM user_profiles WHERE user_id =:user_id

否则执行不了

$profile->execute(array(":user_id"=>$user_id));

更新

根据以下消息,问题是由于äö etc.等特殊原因而发生的

在连接字符串中使用array(PDO::MYSQL_ATTR_INIT_COMMAND =&gt; "SET NAMES 'utf8'")) 来避免这种情况

【讨论】:

  • 是一样的。它根本不为该表选择任何数据。
  • 无论有没有执行(数组),都不会从该表中选择数据。我尝试重新启动 wamp,重新创建表,但没有。
  • 已连接。当我查询例如 tbl_users 时,它会查询所有结果。但这是我的联系方式:
  • 嘿!所以问题似乎是 äö 等特殊字符。我该如何解决?
  • 好的,现在我终于看到了 json,但我得到了这些符号:; asvataja\/\u00f5petajana\/n\u00f5uandjana。如何解决这个问题?
【解决方案2】:

您需要在代码中的这一行 header('Content-type: application/json'); 上方添加 session_start();

【讨论】:

  • 试试这个 $profile->execute();而不是 $profile->execute(array(":user_id"=>$user_id));
  • 这就是我的 atm: $profile = $user_home->runQuery("SELECT * FROM user_profiles"); $profile->execute();
  • 这就是我的自动取款机:这是什么意思?
  • 用于查询。我删除了数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多