0

我是 PHP 和 MySQL 的新手,我正在努力解决以下问题:

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid .;
    if(is_resource($sql) and mysql_num_rows($sql)>0){

当我尝试关闭我的 SQL 语句时会出现问题。我知道这与括号和分号有关,但是每次我更改一件事时,都会弄乱另一件事。有人可以帮我吗?

4

5 回答 5

1

首先,删除第一行的最后一个点,因为最后没有连接任何字符串。应该是这样的:

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid;

您是否正在对 SQL 服务器进行查询?如果不是,则该变量$sql不执行任何操作,因此添加:

$result = mysql_query($sql);

并更改您的最后一行代码以处理查询结果

if(is_resource($result) && mysql_num_rows($result) > 0)
于 2013-02-12T12:15:58.803 回答
1

删除分号前的点。

于 2013-02-12T12:09:16.913 回答
1

以下是您需要做的事情:

  • 删除分号前的最后一个句点
  • 用单引号包裹字符串文字
  • 使用执行查询mysql_query

代码:

$sql = "UPDATE Pharm_Log set text = '$bloodtest'  WHERE patient = " . $patientid;
$result = mysql_query($sql);
if(is_resource($result ) and mysql_num_rows($result )>0) { ... }

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

于 2013-02-12T12:08:51.317 回答
1

是的,它是.导致语法错误的最后一个。另外,您需要将非 int 值括在引号中,另外重要的是不要忘记添加 mysql_real_escape_string 否则会出现问题,您还应该使用 PDO 或 mysqli 与准备好的查询。

<?php 
$sql = "UPDATE Pharm_Log 
        SET `text`='".mysql_real_escape_string($bloodtest)."' 
        WHERE patient = '".mysql_real_escape_string($patientid)."'";
?>
于 2013-02-12T12:11:57.320 回答
0

你最后不需要.。改成,

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid;
于 2013-02-12T12:09:34.823 回答