Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我有一个错误,需要仔细查看mysql语句_Mysql - Fatal编程技术网

我有一个错误,需要仔细查看mysql语句

我有一个错误,需要仔细查看mysql语句,mysql,Mysql,即时消息:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行的near'和articles.cat\u main=articles\u cat\u main.id\u articles\u cat\u main'的正确语法 我看不到任何明显的东西。。这是漫长的一天 谢谢您是否在“文章目录”中有一个名为“id文章目录”的字段。如果没有,那么你有一些东西要删除,这应该可以解决它。你在“articles\u cat\u main”中有一个名为“id\u articles\u ca

即时消息:您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行的near'和articles.cat\u main=articles\u cat\u main.id\u articles\u cat\u main'的正确语法

我看不到任何明显的东西。。这是漫长的一天


谢谢

您是否在“文章目录”中有一个名为“id文章目录”的字段。如果没有,那么你有一些东西要删除,这应该可以解决它。

你在“articles\u cat\u main”中有一个名为“id\u articles\u cat\u main”的字段吗。如果没有,那么您有一些东西要删除,这应该可以解决它。

您需要将其设置为一个
连接
以包含第二个表
articles\u cat\u main
。因此:

$query_article = sprintf("SELECT * FROM articles, articles_cat_main 
    WHERE articles.id = %s 
    AND articles.cat_main = articles_cat_main.id_articles_cat_main", 
    $colname_article);

您需要将其设置为一个
JOIN
,以包含第二个表
articles\u cat\u main
。因此:

$query_article = sprintf("SELECT * FROM articles, articles_cat_main 
    WHERE articles.id = %s 
    AND articles.cat_main = articles_cat_main.id_articles_cat_main", 
    $colname_article);
编辑后 如果变量是数字,只需concat而不用sprintf

$query_nextprev = "SELECT * FROM articles JOIN articles_cat_main ON articles.cat_main = articles_cat_main.id_articles_cat_main WHERE articles.active = 'y' ORDER BY articles_cat_main.name_cat_main, articles.`order`";
但在任何一种情况下,如果变量为空或不包含任何内容,则查询将变为空

$query_article = "
SELECT * FROM articles, articles_cat_main 
WHERE articles.id = " . $colname_article . "
AND articles.cat_main = articles_cat_main.id_articles_cat_main";
所以它出错了

起初的 很明显,您展示的PHP是而不是正在运行的PHP

它有一个

其中articles.cat_main

错误消息已被删除

靠近“articles.cat_main”

编辑后,检查您的代码以查看您真正运行的是什么

WHERE articles.id = AND articles.cat_main
如果变量是数字,只需concat而不用sprintf

$query_nextprev = "SELECT * FROM articles JOIN articles_cat_main ON articles.cat_main = articles_cat_main.id_articles_cat_main WHERE articles.active = 'y' ORDER BY articles_cat_main.name_cat_main, articles.`order`";
但在任何一种情况下,如果变量为空或不包含任何内容,则查询将变为空

$query_article = "
SELECT * FROM articles, articles_cat_main 
WHERE articles.id = " . $colname_article . "
AND articles.cat_main = articles_cat_main.id_articles_cat_main";
所以它出错了

起初的 很明显,您展示的PHP是而不是正在运行的PHP

它有一个

其中articles.cat_main

错误消息已被删除

靠近“articles.cat_main”

检查您的代码以查看您真正运行的是什么

WHERE articles.id = AND articles.cat_main
并用名为$colname\u article的变量的内容替换%s。基于该变量的名称,我认为它不包含整数,可以不加引号插入其中

如果它为空或包含不带引号的字符串,将导致您看到的语法错误

请注意,这类动态SQL语句被删减为具有漏洞

并用名为$colname\u article的变量的内容替换%s。基于该变量的名称,我认为它不包含整数,可以不加引号插入其中

如果它为空或包含不带引号的字符串,将导致您看到的语法错误


请注意,这类动态SQL语句会被删减以具有漏洞。

无论文章中的值是什么,都会导致您的问题。该值很可能不是数字,但在查询中mysql希望它是数字或列名。该值很可能是一个字符串。或者它是空的

你可以这样引用:

SELECT * FROM articles, articles_cat_main
WHERE articles.id = %s AND ...
如果你希望它是一个字符串。或者,如果您希望它是一个数字,您应该使用
%d
而不是
%s
,因为如果您有一个数字以外的内容,您将得到一个PHP警告(但查询仍将失败)


另外,您当前的设置可能会引发SQL注入攻击。您可能有其他代码可以防止这种情况,但如果没有,您应该使用
mysql\u real\u escape\u string()转义
$colname\u article
或者更好的方法是使用PDO和占位符,它们将执行与您在这里使用
sprintf
相同的替换并处理转义。

无论
$colname\u文章中的值是什么,都会导致您的问题。该值很可能不是数字,但在查询中mysql希望它是数字或列名。该值很可能是一个字符串。或者它是空的

你可以这样引用:

SELECT * FROM articles, articles_cat_main
WHERE articles.id = %s AND ...
如果你希望它是一个字符串。或者,如果您希望它是一个数字,您应该使用
%d
而不是
%s
,因为如果您有一个数字以外的内容,您将得到一个PHP警告(但查询仍将失败)


另外,您当前的设置可能会引发SQL注入攻击。您可能有其他代码可以防止这种情况,但如果没有,您应该使用
mysql\u real\u escape\u string()转义
$colname\u article
或者更好的方法是使用PDO和占位符,它们将执行与您在这里使用
sprintf
相同的替换并处理转义。

错误消息不属于您发布的sql语句。看起来查询和错误消息不属于彼此-MySQL抱怨的部分不在你提出的问题。您确定这正是触发此错误的查询吗?错误消息不属于您发布的sql语句。看起来查询和错误消息不属于彼此-MySQL抱怨的部分不在您提供的查询中。你确定这正是触发此错误的查询吗?这是一个语法错误,所以MySQL到目前为止还没有查看表的结构。那么下一个WHERE条件中的“id\u articles\u cat\u main”呢?同样的事情还是故意的?这是一个语法错误,所以MySQL还没有看到表的结构。那么下一个WHERE条件中的“id\u articles\u cat\u main”呢?同样的事情还是故意的?是的,我发错代码了。我用正确的、错误的代码进行了更新。谢谢,我同意你的看法。忘了质疑前提并询问变量是否已定义。抢手货是的,我发错代码了。我用正确的、错误的代码进行了更新。谢谢,我同意你的看法。忘了质疑前提并询问变量是否已定义。抢手货我发错了代码行。我已经用那个坏的更新了。谢谢。我发错代码了。我已经用b更新了它