连接和直接串之间的区别

时间:2014-04-26 20:43:58

标签: php mysql mysqli

我是php新手并撰写一个小型网页。我使用mysqli模块来执行mysql查询。

我遇到了问题,我的查询没有返回任何内容。甚至不是空的结果集。 $result变量只是null。

我使用了PHP代码,为​​我生成了phpmyadmin

$sql = "SELECT u.username, e.title, e.text, e.time"
     . "FROM entry e"
     . "LEFT JOIN user u"
     . "ON e.user_id = u.ID";

我提交的查询如下:

$this->connection = mysqli_connect($this->host,$this->db_user,$this->db_pass, $this->database);
$result = $this->connection->query($sql)

然后$result为空。我还尝试了mysqli_use_result()和其他一些事情没有成功。

在网上搜索了几个小时之后,我试图直接在mysqli_query()中插入语句并且有效

$result = $this->connection->query("SELECT u.username, e.title, e.text, e.time FROM entry e LEFT JOIN user u ON e.user_id = u.ID");

那么,连接和直接输入字符串之间有很大的区别吗?难道我做错了什么?或者这是mysqli或php中的错误?

2 个答案:

答案 0 :(得分:4)

第一行生成的代码与此相同:

SELECT u.username, e.title, e.text, e.timeFROM entry eLEFT JOIN user uON e.user_id = u.ID
//                                       ^^          ^^              ^^

注意缺少的空格?在进行字符串连接时,它们不会神奇地插入。原始代码(如果写得像我认为那样愚蠢,因为你可以在一个字符串中做多行)应该是这样的(最后用空格):

$sql = "SELECT u.username, e.title, e.text, e.time "
     . "FROM entry e "
     . "LEFT JOIN user u "
     . "ON e.user_id = u.ID";

我个人更喜欢以下内容:

$sql = "
    SELECT u.username, e.title, e.text, e.time
    FROM entry e
    LEFT JOIN user u
    ON e.user_id = u.ID
";

答案 1 :(得分:2)

连接确实有效,但在您的情况下,生成的SQL语句不正确。当您考虑此代码产生的内容时:

$sql = "SELECT u.username, e.title, e.text, e.time"
     . "FROM entry e"
     . "LEFT JOIN user u"
     . "ON e.user_id = u.ID";

您将看到生成的SQL语句没有空格 - 它将是:

SELECT u.username, e.title, e.text, e.timeFROM entry eLEFT JOIN user uON e.user_id = u.ID

正如您所看到的,由于缺少空格,此语句无效,并且由于错误(您似乎在代码中忽略)而未获得任何结果。如果要使用串联,则应添加如下空格:

$sql = "SELECT u.username, e.title, e.text, e.time "
     . "FROM entry e "
     . "LEFT JOIN user u "
     . "ON e.user_id = u.ID";

但是,如果你要做的只是让语句更容易阅读,你可以简单地将它作为一个字符串写成多行:

$sql = "SELECT u.username, e.title, e.text, e.time
        FROM entry e
        LEFT JOIN user u
        ON e.user_id = u.ID";

这样也可以。