Php MySQL中出现1064错误,但查询仍然完成?不知道为什么!

Php MySQL中出现1064错误,但查询仍然完成?不知道为什么!,php,mysql,mysql-error-1064,Php,Mysql,Mysql Error 1064,我试图在MySQL数据库中插入许多字段,有些字段失败了,所以我在PHP脚本中添加了一些代码,以尝试跟踪正在发生的事情 替换似乎起作用,因为我可以看到mysql中填充的字段,但我得到以下错误: 1064:您的SQL中有一个错误 句法;检查手册 对应于您的MySQL服务器 要使用的正确语法的版本 在1号线的“1”附近 //插入查询 如果(strlen($link_name)>0) { $query=mysql\u query(“替换为jos\u mt\u链接 (链接id、链接名称、别名、链接描述、用

我试图在MySQL数据库中插入许多字段,有些字段失败了,所以我在PHP脚本中添加了一些代码,以尝试跟踪正在发生的事情

替换似乎起作用,因为我可以看到mysql中填充的字段,但我得到以下错误:

1064:您的SQL中有一个错误 句法;检查手册 对应于您的MySQL服务器 要使用的正确语法的版本 在1号线的“1”附近

//插入查询
如果(strlen($link_name)>0)
{
$query=mysql\u query(“替换为jos\u mt\u链接
(链接id、链接名称、别名、链接描述、用户id、链接批准、metadesc、链接创建、链接修改、网站、价格)
值(“$link\u id”、“$link\u name”、“$link\u name”、“$description”、“63”、“1”、“$metadesc”、“$link\u created”、“$link\u modified”、“$website”、“$cost”);
echo$link_name.“已插入
”; 打印“SQL查询:”.$Query.“
”; if(mysql_查询($query,$db)) { 回声“; 回显“OK!

\n”; } 其他的 { 回声“; 回显“错误

”; echo mysql\u errno().“:”.mysql\u error().“
\n”; }
您的SQL没有问题。您正在将
$query
分配给
mysql\u query()调用的结果。
调用:

$query = mysql_query("REPLACE into jos_mt_links
    (link_id, link_name, alias, link_desc, user_id, link_approved, metadesc,
    link_created, link_modified, website, price)
    VALUES
    ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')");
mysql\u query()
返回
true
false
作为
REPLACE
查询的结果,但更重要的是您分配的是结果,而不是正在执行的SQL查询

此外,在这里:

if(mysql_query($query,$db))
您正在对同一个
$query
变量再次调用
mysql\u query()
,该变量现在的值为
true
(因为您说您的查询正在工作,并且数据库正在正常更新).PHP将布尔值
true
解释为字符串
'1'
,您告诉MySQL运行一个名为
1
的查询,这会产生错误

您可能打算这样分配
$query
,以便您的if条件正常工作:

$query = "REPLACE into jos_mt_links
    (link_id, link_name, alias, link_desc, user_id, link_approved, metadesc,
    link_created, link_modified, website, price)
    VALUES
    ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')";
并在if语句中调用您的
echo


另一件事:正如Mark Baker所指出的,在将变量直接插入SQL之前,请确保已使用
mysql\u real\u escape\u string()
对变量进行了转义。

是所有字符串值(例如$link\u id、$link\u name等)转义正确吗?谢谢,这很有意义。你能说明我是如何检查我使用的mysql\u real\u escape\u string()的吗?从检查结果来看,失败的记录在描述中似乎有一个撇号。例如,描述中有一个撇号的记录刚刚失败。我们最安全的做法是假设传入的变量都是未被替换的,并在运行查询之前对其运行该函数。我已经做了一些搜索和所有示例,即在这里讨论ab在POST和GET中都不需要它,所以它仍然是必要的?只要您插入的数据来自不受信任的源,即您自己的代码生成的数据以外的其他数据,那么是的,它仍然是必要的。
$query = "REPLACE into jos_mt_links
    (link_id, link_name, alias, link_desc, user_id, link_approved, metadesc,
    link_created, link_modified, website, price)
    VALUES
    ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')";