PHP SQL查询select语句出错


PHP SQL Query ERROR in a select statement

$id = $_POST['idn'];
$con=mysqli_connect("localhost","root","xyz","patient");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = "SELECT count(*) FROM record WHERE ID='$id'";
$count = mysql_result(mysql_query($query),0);
if($count > '0')
{
id exist
}
else
{
add id & record 
}

这里的错误是什么?它不检查ID是否存在,并添加重复ID,其中ID为RC50001 RC50002......ID定义为表

中的文本

不要使用LIKE,使用=,您正在寻找与ID的精确匹配,因此=是在这种情况下使用的正确比较运算符:

$query = "SELECT * FROM `record` WHERE `ID` = '$id' LIMIT 0 , 300";

并且您应该在将$id插入查询之前验证其格式是否符合您的期望。此外,您应该使用MySQLiPDO扩展,而不是mysql扩展。

如果您只是检查ID是否已在数据库中使用,则返回ID已使用的次数将比返回每条匹配记录更有效。

注意:这里使用的是MySQLi,因为mysql_*函数将在下一个PHP版本中被弃用(已经在测试中)。您需要将所有mysql_*()函数更新为mysqli_*()

$query = "SELECT COUNT(*) AS IDCount FROM `record` WHERE `ID` = '$id'";
$result = mysqli_query($query) or die("Couldn't execute ID check query.");
$row = mysqli_fetch_assoc($result);
if($row['IDCount'] > 0)
{
    echo "ID already exists<br />";
}

让你的代码回显你的查询,然后在MySQL workbench或PHPMyAdmin中测试它。

如果你在寻找一个ID,它将是精确的。在语句中使用LIKE时要小心。如。如果有人查找id='1',它返回一条记录。id LIKE '%1%'返回所有包含"1"的记录。

这样安全多了。特别是因为你没有根据你的例子对ID做任何事情。

<?php
  $query = "SELECT count(*) FROM record WHERE ID='$id'";
  $count = mysql_result(mysql_query($query),0);
  if($count > '0'){
    echo "ID already exists<br>";
  } else {
    echo($query);        
    die();
  }  
?>

我没有测试过,但是应该使用之类的,或者MySQLi语句,但是您需要学习以这种风格编写代码的方法。

<?php
    try {
        $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
        $query = "SELECT count(*) FROM record WHERE ID='$id'";
                    //Checking for no results.
        if(!empty($dbh->query($query))){
          echo "ID already exists.";
        } else {
          echo "ID does not exist.";
        }  
        $dbh = null;
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
?>

Oh yeah and remember:

警告:如果应用程序没有捕获从对于PDO构造函数,zend引擎采取的默认操作是to终止脚本并显示回溯跟踪。这个反向跟踪将可能会显示完整的数据库连接详细信息,包括用户名和密码。抓住它是你的责任异常,显式地(通过catch语句)或隐式地通过set_exception_handler () .

我认为你可以使用while循环在数据库中搜索匹配的id,而不仅仅是使用if-else语句。

示例:

if($row != 0)
{ 
  while ($row = mysql_fetch_assoc($query)
  {
     $row['id'];
  }