【问题标题】:php mysqli returning null rows after queryphp mysqli在查询后返回空行
【发布时间】:2014-06-09 06:46:34
【问题描述】:

我用过这个查询:

SELECT * FROM sillaru_users AS users 
JOIN sillaru_users_data AS users_data 
ON users.id = users_data.user_id 
WHERE name = 'user_package_id' AND users.id = 2

在phpadmin中没问题,但在代码中返回false,可能是什么原因?

更新

public function __construct($data)
{
    foreach($data as $key => $value)
    {
        $this->$key = $value;
    }

    $this->conn = mysqli_connect($this->host, $this->username, $this->password, $this->db);

    if (mysqli_connect_errno())
    {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    $this->conn->set_charset("utf8");
}

public function query($query)
{

    $this->result = $this->conn->query($query);
    return $this;
}


public function row()
{
    if($this->result)
    {
        $row = mysqli_fetch_assoc($this->result);
        mysqli_free_result($this->result);
    }
    else
    {
        $row = false;
    }
    return $row;
}

这里是db类的来源,我这样称呼它:

    $node = $this->db->query("SELECT * FROM ".Config::$prefix."users AS users JOIN ".Config::$prefix,"users_data AS users_data ON users.id = users_data.user_id WHERE name = 'user_package_id' AND users.id = {$id}")->row();

var_dump($node); //boolean false

这里有什么想法吗?

我的配置:

<?php

class Config
{

    public static $charset = 'UTF-8';
    public static $prefix = 'sillaru_';
    public static $maxUsersPerLevel = 3;

    public static $db = array(

        'localhost' => 'localhost',
        'prefix' => 'sillaru_',
        'db' => 'sillaru',
        'username' => 'root',
        'password' => ''
    );

    public static $currentApplication = 'sillaru';



}

我的配置文件

【问题讨论】:

  • 您是否检查过查询的错误结果?如果是这样,它在哪里和说什么?如果没有,我会尝试(并确保 name 不是两个表中的列名。
  • @JeremyMiller 我试过 var dump,所有属性都有空值,无法弄清楚发生了什么,因为查询有效(在 phpmyadmin sql 提示符中检查)连接很稳定
  • 你能告诉我们表格的结构吗?
  • 我认为在编辑这个问题的过程中,PHP部分被意外删除了。
  • @JeremyMiller 他实现了自己的数据库类,代码都在问题中。

标签: php mysql php-5.4


【解决方案1】:

错误似乎出现在 .Config::$prefix 附近的下一行, -- 逗号必须用点分隔。

$node = $this->db->query("SELECT * FROM ".Config::$prefix."users AS users JOIN ".Config::$prefix,"users_data AS users_data ON users.id = users_data.user_id WHERE name = 'user_package_id' AND users.id = {$id}")->row();

var_dump($node);

下面一行替换

 $node = $this->db->query("SELECT * FROM ".Config::$prefix."users AS users JOIN ".Config::$prefix."users_data AS users_data ON users.id = users_data.user_id WHERE name = 'user_package_id' AND users.id = {$id}")->row();

【讨论】:

  • users表没有name字段,有login字段,name字段属于users_data没有混淆
  • 啊,您发现逗号不正确,并且在编辑帖子的 OP 更改内容以便他们可以在您的帖子上说“我重复”cmets 之后,您将其编辑为替换缺少的逗号。干得好。
  • @Abhishek 不要只显示代码,请解释您更改的内容和原因。
【解决方案2】:

使用别名.* 代替 *

 SELECT users.* FROM sillaru_users AS users 
 JOIN sillaru_users_data AS users_data 
 ON users.id = users_data.user_id 
 WHERE name = 'user_package_id' AND users.id = 2

【讨论】:

  • 这将减少显示的列数,但不会改变行数。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2013-09-14
  • 2018-08-11
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多