检查PDO语句的结果以运行条件

时间:2015-11-19 13:07:57

标签: php html mysql pdo

我正在尝试将新号码输入数据库,只有在它尚不存在的情况下,为了做到这一点,我正在做以下事情

if (isset($_POST['Number'])) {
    $number = ($_POST['Number']);
        $NCheck = "SELECT COUNT(*) FROM `DS_Numbers` WHERE `Number` = '$number' ";

    $stmt = $dbCon->prepare($sql);//* prepared statement for result which populates table
    $stmt->execute();
        $result = $stmt->fetchColumn(0);


        if($result > 0){ // if there is a value then block
            $ENumber = "This Number already exists";
            $errors[] = 'error';
     } else {
            echo "number done";// echo statement to see that it has reached this
            $number1 = ($_POST['Number']);
            }
} else {
     $errors[] = 'error';
     $ENumber = "Please enter only digits from 0-9";
}

目前发生的事情是我的PDO声明没有返回,所以我的结果值总是0,但我的研究都没有证明我有问题

关于我哪里出错的任何建议? 我从页面上的HTML表单中获取Number,这方面没有问题。

2 个答案:

答案 0 :(得分:1)

首先要注意的是,您在一个名为$NCheck的变量中编写查询,而不是$sql

所以这一行

$stmt = $dbCon->prepare($sql);

应该是

$stmt = $dbCon->prepare($NCheck);

另请注意,使用PDO的一个主要优点是使用绑定参数,但是您没有这样做,并且您实际上是暴露于SQL注入,因为您只是在查询中添加POST中获得的值

答案 1 :(得分:0)

如果表中的数字必须是唯一的,那么您应该在列中添加UNIQUE约束。然后,您可以只插入数字,如果它不唯一,数据库将返回“重复键”错误。

如果您使用'先检查后插入'方法,您可以接受比赛条件;如果两个进程试图同时插入相同的数字,它们将同时运行select并且它们都将为零并尝试插入,没有唯一约束将对两者都有效。