【问题标题】:mysql check manual errormysql检查手动错误
【发布时间】:2013-02-12 14:16:31
【问题描述】:

在编写以下代码后遇到了一个我从未见过的错误:

$query= "UPDATE `Pharm_Log` SET `text` = ". $bloodtest . " WHERE `id` = " . $patientid;
   $result = mysql_query($query) or die(mysql_error());

我的错误信息是这样的

“您的 SQL 语法有错误;请查看手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近第 1 行的“压力测试:235/43 WHERE id = 1”

有人知道如何解决这个问题吗?将不胜感激

【问题讨论】:

  • 您使用的是an obsolete database API,应该使用modern replacement。您可能也容易受到SQL injection attacks 的影响,现代 API 可以让您更轻松地从defend 中获取。不要通过将字符串混合在一起来构建 SQL 查询。
  • 您有一些 PHP 会生成一些 SQL。您的 SQL 有问题。 PHP 不完整,因此我们无法运行它来查看$query 的最终值是多少。如果我们能看到 SQL,你不觉得调试 SQL 会更容易吗?

标签: php mysql


【解决方案1】:

字符串文字($bloodtest的值)必须用单引号括起来,

$query= "UPDATE `Pharm_Log` SET `text` = '". $bloodtest . "' WHERE `id` = " . $patientid;
$result = mysql_query($query) or die(mysql_error());

作为旁注,如果变量的值(s)来自外部,则查询很容易受到SQL Injection 的攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

【讨论】:

  • 感谢您的回复,我问自己但是,当它用单引号括起来时,我得到一个 T_CONSTANT_ENCAPSED_STRING 错误,这与引号有关吗?
  • "UPDATE Pharm_Log SET text = '$bloodtest' WHERE id = $patientid"; 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多