2013-02-12 175 views
0

我新的PHP和MySQL,我下面的问题所困扰:MySQL和PHP意外错误

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

,当我试图关闭我的SQL语句出现问题。我知道这是与托架和分号相关的事情,但每当我改变一件事情时,就会弄乱另一件事情。有人可以帮我吗?

+1

我觉得这只是最后的点在分号之前,尝试删除那个 – bhttoan 2013-02-12 12:08:13

+1

另外,'$ sql'是一个字符串,而不是资源。您需要首先执行查询以获取资源。而'mysql_num_rows()'不适用于UPDATE查询。 – Arjan 2013-02-12 12:11:05

+0

所有'mysql_ *'函数都被弃用。改为使用'mysqli'或'PDO'功能。 – Arjan 2013-02-12 12:14:13

回答

1

这里的事情,你需要做的:

  • 删除分号
  • 前的最后阶段包裹字符串字面单引号
  • 执行使用mysql_query
查询

code:

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

作为旁注,如果变量的值(s)来自外部,则该查询容易受到SQL Injection的影响。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。

1

分号之前删除的点。

0

最后您不需要.。改成它,

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

非常感谢您的帮助! – user2064630 2013-02-12 12:25:41

1

是的,它的最后.这是造成语法错误。另外你需要在引号中包含非整型值,另外它的重要之处在于你不会忘记添加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)."'"; 
?> 
1

Firsdt,删除第一行的最后一个点,因为您没有在末尾连接任何字符串。应该看起来像这样:

$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)