我是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中的错误?
答案 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";
这样也可以。