如何在同一PHP代码中执行两个查询?

时间:2014-07-25 15:47:35

标签: php mysql

我是PHP编程的新手。我想在相同的PHP代码上执行2个查询。第一个查询给了我预期的结果。但第二个查询似乎无法正常工作。但它没有向我显示任何错误消息。有人能帮助我吗?

 <?php
                  mysql_connect('localhost','root','');
                  mysql_select_db('health');
                  $query1="SELECT * FROM messages,doctor WHERE doctor.regNo=messages.regNo AND messages.ID='".$id."';"; 
                  $result1=mysql_query($query1) or die(mysql_error());
                  $row=mysql_fetch_array($result1);
                  echo '<table cellspacing="10">';
                  echo '<tr><td><b>From: </b></td><td>Dr. '.$row['firstName'].' '.$row['lastName'].'</td></tr>';
                  echo '<tr><td><b>Category: </b></td><td>'.$row['category'].'</td></tr>';
                  echo '</table>';
                  echo '<p style="padding-left:13px;">'.$row['reply'].'</p>';
                  echo '</br><b style="padding-left:13px;">Your question</b></br>';
                  echo '<p style="padding-left:13px;">'.$row['question'].'</p>';

                  $query2="UPDATE health.messages SET read='Y' WHERE messages.ID='".$id."';"; 
                  $result2=mysql_query($query2);
                  mysql_close();
             ?>

2 个答案:

答案 0 :(得分:2)

  

是的,它给了我一个错误。错误是“您的SQL语法中有错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行的'read ='Y'WHERE messages.ID ='7''附近使用正确的语法”< / p>

read是MySQL保留字

在列名称周围使用反引号。

例如:

SET `read`='Y'

或使用其他词语。


  

但它没有向我显示任何错误消息。

那是因为你没有检查错误。在打开<?php标记后立即将错误报告添加到文件顶部 error_reporting(E_ALL); ini_set('display_errors', 1);包括第二个查询的or die(mysql_error()),您没有像第一次查询那样进行查询。

另外,您的代码非常容易使用您正在使用的当前(和已弃用的)MySQL API进行SQL注入。

使用mysqli_* with prepared statementsPDOprepared statements


关于代码中与安全相关的其他问题,您的问题已经留下了评论。

引用布拉德的评论:

  

您只是将文本数据直接回显到HTML而没有转义。您必须使用htmlspecialchars(),否则可能会产生无效的HTML并使自己受到XSS攻击。


以下是一些您可以阅读SQL注入主题的链接:

跨站点脚本(XSS)

答案 1 :(得分:1)

您正在使用保留的MySQL字词(例如READ)作为列名。

要解决此问题,请更改行

$query2="UPDATE health.messages SET read='Y' WHERE messages.ID='".$id."';"; 

$query2="UPDATE health.messages SET `read` = 'Y' WHERE messages.ID='".$id."';"; 

我还建议你留意其他人关于使用depreceated MySQL函数和SQL注入问题的警告。

您还应尝试使用不会与reserved MySQL keywords发生冲突的列命名,从而更加独特。尝试使用一致的前缀(例如messageReadisRead