我正在尝试将新号码输入数据库,只有在它尚不存在的情况下,为了做到这一点,我正在做以下事情
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,这方面没有问题。
答案 0 :(得分:1)
首先要注意的是,您在一个名为$NCheck
的变量中编写查询,而不是$sql
。
所以这一行
$stmt = $dbCon->prepare($sql);
应该是
$stmt = $dbCon->prepare($NCheck);
另请注意,使用PDO的一个主要优点是使用绑定参数,但是您没有这样做,并且您实际上是暴露于SQL注入,因为您只是在查询中添加POST中获得的值
答案 1 :(得分:0)
如果表中的数字必须是唯一的,那么您应该在列中添加UNIQUE约束。然后,您可以只插入数字,如果它不唯一,数据库将返回“重复键”错误。
如果您使用'先检查后插入'方法,您可以接受比赛条件;如果两个进程试图同时插入相同的数字,它们将同时运行select并且它们都将为零并尝试插入,没有唯一约束将对两者都有效。