MYSQL更新错误 - 无法查找问题

时间:2017-02-13 22:29:50

标签: php mysql

我收到以下错误:

  

更新错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'ContactOfficeNo ='20045878'WHERE ClientCode ='MARI''第2行附近使用正确的语法

现在我注意到ClientCode='Mari'之后还有另一个'?

但我的代码如下。我似乎无法找到问题。我有开放和&使用更新查询关闭"",因为它应该是:

include("../dbinfo.inc.php");
$comm=@mysql_connect(localhost,$username,$password);
$rs=@mysql_select_db($database) or die( "Unable to select database"); 

$id = $_POST["clientcode"];
$cli = $_POST["clientname"];
$em1 = $_POST["email1"];
$em2 = $_POST["email2"];
$em3 = $_POST["email3"];
$cry = $_POST["currency"];
$occ = $_POST["othercc"];
$mob = $_POST["mobile"];
$dty = $_POST["dtymobile"];
$off = $_POST["office"];

$sql = "UPDATE tbl_client SET ClientName='$cli', ContactEmail#1='$em1', ContactEmail#2='$em2', ContactEmail#3='$em3', Currency='$cry', OtherCCinfo='$occ', ContactMobileNo='$mob', DutyMobileNo='$dty', 
ContactOfficeNo='$off' WHERE ClientCode='$id'";

1 个答案:

答案 0 :(得分:2)

$dty的价值是多少?在这些时刻记住两个提示非常有用:

  • )错误(几乎)总是发生在SQL错误输出通知中的“near”点之前,因此 BEFORE ContactOfficeNo='20045878中的几个字符是导致问题的原因

  • )在运行它之前error log完成SQL是很好的准备,以确切了解错误发生时的情况。

    error_log("My SQL: Line ".__LINE__." :". $sql );
    

<强> Additionals:

1)正如其他人的评论所说,你真的应该考虑使用MySQLi或PDO参数化查询。

  

Little Bobby your script is at risk for SQL Injection Attacks. 。即使escaping the string也不安全!

- Jay Blanchard

  

如果使用参数化查询,则不会出现此问题。

- 戈登林诺夫

2)停止使用@来抑制错误。你造成的问题比你解决的问题还多。

3)MySQL DEPRECATED ,不应使用。使用MySQLi(或PDO)。 立即

4)请阅读并注意Gordon和Jay在你的问题下面的评论,这可能是(可能)你的问题的原因,你没有逃避你的$_POST输入。这是非常危险的,会导致各种各样的问题和颠簸。

5)在MySQL列名中包含非字母字符(因此不是a-z)充其量是有风险的,并且可能会导致其他问题。强烈建议不要在列名中放置任何非a-z字符。

请阅读Mark Ba​​ker关于合适列名的docs refrence

  

ContactEmail#1?!?你的列名真的有#吗? Permitted characters in unquoted identifiers: ASCII: [0-9,a-z,A-Z$_] (basic Latin letters, digits 0-9, dollar, underscore) Extended: U+0080 .. U+FFFF如果你有其他字符,那么你需要在反引号中包装列名(`)

- 马克贝克