PHP变量在MySQL查询中不起作用

PHP变量在MySQL查询中不起作用,php,mysql,Php,Mysql,我在让变量在MySQL查询中工作时遇到了一些问题。我以前做过这件事,但由于某种原因它不起作用。我可能错过了一些东西,但我想不出来有人能帮我吗 我的代码 $cat = "Fashion"; $article = db::getInstance()->query("SELECT * FROM articles WHERE category = $cat ORDER BY views"); if($article->results(){ echo 'success!'; } els

我在让变量在MySQL查询中工作时遇到了一些问题。我以前做过这件事,但由于某种原因它不起作用。我可能错过了一些东西,但我想不出来有人能帮我吗

我的代码

$cat = "Fashion"; 

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = $cat ORDER BY views");

if($article->results(){
echo 'success!'; 
}
else{
echo 'no';
}
我应该得到“成功”的回应,但我得到的却是“不”;时尚是我数据库中的一个类别,所以不知道为什么这对我不起作用

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = $cat ORDER BY views"
此行缺少右括号和分号

此外,变量应该用单引号括起来

将该行更改为:

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = '$cat' ORDER BY views");

您的
if
语句在语法上也是错误的。缺少右括号:

if($article->results(){
冒号而不是分号:

echo 'no':
整个部分应如下所示:

if($article->results()) {
    echo 'success!'; 
} else {
    echo 'no';
}
通过一点清理和维护,它可以看起来很简单:

echo $article->results() ? "success!" : "no";

首先,我希望您认识到,除非您完全控制输入变量,否则SQL注入很容易受到攻击

第二,变量周围应该有单引号,即

$article = db::getInstance()->query("SELECT * FROM articles WHERE category = '$cat' ORDER BY views");
注:我还添加了缺失的
从该行末尾开始


最后,您的if语句似乎缺少另一个

您是否尝试过将变量括在单引号中<代码>其中category='$cat'
视图“
缺少一个括号和分号=>以及一个冒号
回显'no':
而不是分号。
如果($article->results(){
缺少一个括号。因此,不要问自己代码失败的原因。你会得到
'no'
,因为这是你编程系统在出现错误时向你显示的。你也可以尝试从数据库对象中获取实际错误,我相信它会告诉你查询失败的原因。(虽然显示的代码会因为几个原因而失败,所以我怀疑这甚至不是您正在使用的代码。)最终,使用带有查询参数的预处理语句,而不是直接连接值,这种语法/引用错误将变得毫无意义。您错过了很多东西;-)《弗雷德二世》的草稿完成了一半-…这比我的论文要长…谢谢,伙计,这只是我遗漏的单引号。很抱歉,遗漏了分号,我只是粗略地写在这里。你也遗漏了一些;-)啊,是的,我没有注意到
。Good spot@Fred ii-。奇怪的是,这段代码竟然能输出任何东西。是的,冒号是可疑的,因为它会要求按下SHIFT键,并且两个键都在同一个键上。很难说OP是不是在试图向每个人扔一个曲线球;-)我的代码只是一个粗略的例子我实际上有。很多错误都是因为我试图快速打字而失败的。所有的分类现在我只是错过了分号,哈!我已经做了十几次了,但是完全错过了!