Php 更新查询失败的次数几乎为1/10

Php 更新查询失败的次数几乎为1/10,php,mysql,Php,Mysql,我有一个疑问: $wd=1.5480; $query = "UPDATE books SET myprice= myprice + $wd"; 查询失败的次数几乎是十分之一。我没有发现明显的模式。 我尝试更新的列是一个浮动。该值在0到9.99999之间变化。 我已将错误日志设置为报告查询中的错误,并显示查询本身 我在错误日志中发现了以下错误: Database Error: You have an error in your SQL syntax; check the manual th

我有一个疑问:

$wd=1.5480;
$query = "UPDATE books SET myprice= myprice + $wd";  
查询失败的次数几乎是十分之一。我没有发现明显的模式。
我尝试更新的列是一个浮动。该值在0到9.99999之间变化。
我已将错误日志设置为报告查询中的错误,并显示查询本身 我在错误日志中发现了以下错误:

Database Error: You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use near '=+1' 
at line 1<br/><br/>
Query:UPDATE books SET =+1
数据库错误:您的SQL语法有错误;检查手册
与MySQL服务器版本相对应,以便在“=+1”附近使用正确的语法
在第1行

查询:更新书籍集=+1
如您所见,myprice在查询中丢失。 我做错了什么


提前感谢您的帮助。

您错过了myprice变量前面的$infort,这可能是原因

您错过了myprice变量前面的$infort,这可能是原因

尝试以下方法:

$query = "UPDATE books SET `myprice` = `myprice`+".$wd;
试试这个:

$query = "UPDATE books SET `myprice` = `myprice`+".$wd;
试试这个:

$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
试试这个:

$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
尝试替换“by”以避免不必要的var解释,并使用sprintf()进行查询构造:

$query = sprintf('UPDATE books SET myprice = myprice + %s', $wd);
尝试替换“by”以避免不必要的var解释,并使用sprintf()进行查询构造:

$query = sprintf('UPDATE books SET myprice = myprice + %s', $wd);
你能试试这个吗

$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
你能试试这个吗

$query = "UPDATE `books` SET `myprice` = `myprice` + $wd"; 
试试这个

  $wd=1.5480;

  $query = "UPDATE books SET `myprice` = `myprice` + {$wd}";
试试这个

  $wd=1.5480;

  $query = "UPDATE books SET `myprice` = `myprice` + {$wd}";


您确定
myprice
不是一个变量吗?请尝试将
myprice
括在反勾中。@explosion在
myprice
之前没有美元符号。更多的代码可能会有所帮助。MySQL不只是更新和删除列名。实际上向服务器发出此查询的代码有些古怪;你没有发送我能看到的查询。问题出在
$query=
和将查询发送到数据库的实际调用之间。查看该代码会有帮助。你确定
myprice
不是一个变量吗?请尝试将
myprice
括在后面。@explosion在
myprice
之前没有美元符号。更多的代码可能会有所帮助。MySQL不只是更新和删除列名。实际上向服务器发出此查询的代码有些古怪;你没有发送我能看到的查询。问题出在
$query=
和将查询发送到数据库的实际调用之间。看到那个密码会有帮助的。为什么要否决投票?Backsticks是保留关键字,而“myprice”不是……我同意;这不值得投反对票。这里不需要背景标记。有些东西正在重新解释查询,这至少消除了一个可能的破坏点。虽然我会把
%s
改成
%f
或者别的什么,因为它永远不应该是非浮动的……好吧,从技术上讲,它应该是非浮动的,因为当你处理钱的时候,浮动很糟糕。SQLwise,它可能应该是一个
十进制
。但是,在这个问题得到解决之前,
%f
至少消除了语法错误和SQL注入的可能性。为什么要否决投票?Backsticks是保留关键字,而“myprice”不是……我同意;这不值得投反对票。这里不需要背景标记。有些东西正在重新解释查询,这至少消除了一个可能的破坏点。虽然我会把
%s
改成
%f
或者别的什么,因为它永远不应该是非浮动的……好吧,从技术上讲,它应该是非浮动的,因为当你处理钱的时候,浮动很糟糕。SQLwise,它可能应该是一个
十进制
。但在修复之前,
%f
至少消除了语法错误和SQL注入的机会。他没有错过$是因为他想给当前字段名的现有值添加一个值,(myprice)他没有错过$是因为他想给当前字段名的现有值添加一个值,(myprice
myprice
不是保留字。即使是保留字,也不会从查询中删除;MySQL只会抱怨一个意外的关键字或其他东西。@我没有删除它,我告诉查询它是一个字段名,添加它的值将得到php变量值。MySQL已经知道它是一个字段名称,因为这就是SQL中出现的问题。问题是,它甚至从未看到
myprice
(错误表明它已被完全删除)。在
$query=
和实际执行之间的某个地方,SQL被破坏了。@MIsspoo,谢谢。我已经成功地执行了2000个查询!@Kabamaru:如果这真的解决了你的问题,那么有些事情你没有告诉我们。一个直接的
mysqli\u查询
$db->prepare($query)
不会像您描述的那样损坏SQL。Ever.Period。您如何运行查询?
myprice
不是保留字。即使是保留字,也不会从查询中删除;MySQL只会抱怨一个意外的关键字或其他东西。@cHao我没有删除它,我告诉查询它是一个字段e,并将其值添加到php变量value中。MySQL可能已经知道它是一个字段名,因为这是SQL中的一个字段名。问题是,它甚至从未看到
myprice
(错误表明它已被完全删除)。在
$query=
和实际执行之间的某个地方,SQL被破坏了。@MIsspoo,谢谢。我已经成功地执行了2000个查询!@Kabamaru:如果这真的解决了你的问题,那么有些事情你没有告诉我们。一个直接的
mysqli\u查询
$db->prepare($query)
不会像您描述的那样损坏SQL。Ever.Period。您是如何运行查询的?很好,尽管倒勾不是必需的。很好,尽管倒勾不是必需的。