2014-04-26 77 views
0

我是新来的PHP和写一个小型的网页。我使用mysqli模块来执行mysql查询。串联和直接字符串之间的区别

我刚刚有问题,我的查询没有返回任何东西。甚至没有一个空的结果集。 $result变量仅为null。

我为我所用

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

产生的PHP码,phpMyAdmin的我提交查询类似如下:

$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中的错误?

回答

3

是你的第一行生成的代码是相同的:

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 
"; 
+0

谢谢!你的答案是完全有道理的。但由于这不是我的第一个编程语言,现在我觉得有点愚蠢;-) – 0xAffe

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"; 

这也可以正常工作。

+1

这几乎是可怕的,我们的帖子相似。 – h2ooooooo

+1

@ h2ooooooo我可以说“伟大的思想一致”。考虑到我们的答案之间的差异是2分钟,所以我有理由得出结论,在你完成你的答案之前我开始写答案。 –

+0

完全同意你不是简单地复制粘贴我的 - 它不应该是讽刺 - 我只是觉得我很滑稽,我们都建议相同的两个修复(虽然在最后一个查询中有点不同)。 – h2ooooooo

相关问题