-4
$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 定义为表中的文本

4

4 回答 4

1

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

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

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

于 2013-04-13T16:33:12.677 回答
1

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

注意:这是使用 MySQLi,因为 mysql_* 函数将在下一个 PHP 版本中被弃用(已经在 beta 中)。您需要将所有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 />";
}
于 2013-04-13T16:38:39.930 回答
0

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

样本 :

if($row != 0)
{ 
  while ($row = mysql_fetch_assoc($query)
  {
     $row['id'];
  }
于 2013-04-13T18:51:30.600 回答
0

让您的代码回显您的查询,然后在 MySQL 工作台或 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();
    }

?>

哦,是的,记住:

警告:如果您的应用程序没有捕获从 PDO 构造函数抛出的异常,则 zend 引擎采取的默认操作是终止脚本并显示回溯。此回溯可能会显示完整的数据库连接详细信息,包括用户名和密码。您有责任明确地(通过 catch 语句)或通过 set_exception_handler() 隐式地捕获此异常。

于 2013-04-13T16:37:09.970 回答