2015-11-05 45 views
0

我终于在这里创建了我的帐户。你已经帮了我很长时间了,但是这次我在这里找不到答案。Mysqli使用mysql变量错误

我是MySqli中的新成员,我试图运行一个在phpMyAdmin中工作的脚本。

当我尝试使用'mysql变量'时会出现问题。代码和错误如下。

$consulta = "SET @var= (SELECT ticket_id FROM ost_ticket WHERE number = 410037); 

SELECT DISTINCT a.number, a.created, b.address, 
SELECT DISTINCT title FROM ost_ticket_thread a WHERE a.ticket_id = @var AND a.source LIKE 'API')title, 
SELECT DISTINCT body FROM ost_ticket_thread a WHERE a.ticket_id = @var AND a.source LIKE 'API')body, 
d.state, 
c.body resposta 
FROM ost_ticket a 
LEFT JOIN ost_user_email b ON b.user_id = a.user_id 
LEFT JOIN ost_ticket_thread c ON c.ticket_id = a.ticket_id 
LEFT JOIN ost_ticket_status d ON d.id = a.status_id 
WHERE a.ticket_id = @var AND c.id = (SELECT MAX(a.id) FROM ost_ticket_thread a WHERE a.ticket_id = @var) "; 


$resultado = $MySQLi->query($consulta) OR trigger_error($MySQLi->error, E_USER_ERROR); 

$cont = 0; 

while ($informacao = $resultado->fetch_object()) { 


$data[$cont] = array(
'numprot'  =>  $informacao->number, 
'email'  =>  $informacao->address, 
'assunto'  =>  $informacao->title, 
'status'  =>  $informacao->state, 
'body'  =>  $informacao->body, 
'resposta'  =>  $informacao->resposta, 
'dtcriacao'  =>  $informacao->created, 
); 

$cont++; 

} 

echo "{'lista':".json_encode($data)."}"; 

正如我所说,它在phpMyAdmin中工作正常,但我得到了mysqli查询函数中的后续错误。

Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT distinct a.number,a.created,b.address, (select distinct title from ost_t' at line 3 in /home/u605553750/public_html/JSONResposta.php on line 22 

$resultado = $MySQLi->query($consulta) OR trigger_error($MySQLi->error, E_USER_ERROR); 

What's对mysqli的运行它以正确的方式行22场比赛?

感谢 布鲁诺

+0

当您复制并粘贴在你的PHP管理这个SQL查询它执行?看起来你有拼写错误,但我不知道'MariaDB'是否允许:'b.address,(另一个选择)x' ...另外,将SQL命令保持为大写字母,使维护更容易被认为是好的做法 – Bonatti

+0

It确实有效。我把它编码在phpMyAdmin上。 –

+0

我认为问题在于使用“SET @var = ...”和“;”到底。 –

回答

1

好像你从该行忘了。

SELECT DISTINCT a.number,a.created,b.address [FROM YOURTABLE]<-add this, (... 

经过澄清,我认为我更了解你的意图,在这种情况下,你应该确保你的子查询返回一个select_expression。注意“AS”?

SELECT DISTINCT a.number,a.created,b.address, 
(SELECT DISTINCT title FROM ost_ticket_thread a WHERE a.ticket_id = @var AND a.source LIKE 'API') AS title 

http://dev.mysql.com/doc/refman/5.7/en/select.html

+1

请代替w3schools,使用官方文档(如[PHP手册](http://php.net/manual/en/function.mysql-select-db.php))或手册特定的数据库...无论如何,在答案上大拇指.... [和证明为什么w3schools不好,请阅读此链接](http://www.w3fools.com/) – Bonatti

+0

我觉得官方文档有点对这个问题苛刻,但你绝对正确,w3c学校留下了一个非常倾斜的东西:) –

+1

我与该网站的主要问题是过时的信息,以及它使用的过于简单化的定义...最后,有时候,建议实施提供了主要的安全漏洞,老开发人员往往不得不修复拉特呃(比如从不清理输入,或者在html页面中删除数据库详细信息,等等。) – Bonatti