我在整个论坛中看到过几种不同的方法,但其中没有一种方法似乎有效。我在这一件事上花了大约12个小时,它变成了时间的下沉。
以下是我尝试过的代码的最后一次迭代:
$ciid = $_POST['categoryid'];
$check = $db->prepare("SELECT categoryid, imgid FROM catType WHERE categoryid = $ciid AND imgid = $imgID ");
$check->bindParam(categoryid,$ciid);
$check->bindParam(imgid,$imgID);
$check->execute();
if($check->rowCount() > 0 ){
echo "dqowdhnoqwhd";
} else {
/*run working insert */
}
/* the form that passes the $_POST value */
echo "<p><input type=\"checkbox\" name=\"catname[]\" value=\"".$row['categoryid']."\" />" . $row['cName'] . " </p>";
echo "<p><input type=\"hidden\" name=\"".$imgID."\" value=\"".$imgID."\"/></p>";
现在看来,我没有错误但它也没有告诉我该记录已经存在于数据库中。当我添加新记录时,它只是重复它。
数组:
Array
(
[catname] => Array
(
[0] => 1
)
[111] => 111
[icud] => update category
)
我在phpMyAdmin中运行了查询,该公式适用于我希望它做的事情。
答案 0 :(得分:2)
您的代码(例如bind_param()
用法)建议您使用参数化查询,但是您不会在查询中留下您尝试绑定的参数的任何位置。试试这个:
$ciid = $_POST['categoryid'];
$stmt = $db->prepare("SELECT COUNT(*) FROM catType WHERE categoryid = ? AND imgid = ?");
$stmt->execute(array($ciid, $imgID));
$count = $stmt->fetchColumn();
if($count > 0) {
echo "dqowdhnoqwhd";
} else {
/*run working insert */
}
the documentation关于numRows()
的注释:
如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序。
相反,由于您没有从数据库中获取任何有用的内容,因此您只需执行匹配的COUNT()
行。 fetchColumn()
函数将拉出结果集中下一行的第一列;方便拉出单个值。
答案 1 :(得分:0)
我没有做的是对持有categoryid的数组项运行foreach循环。所以我过去尝试过的所有事情,很多时间都不会奏效。这是我的解决方案,请随时提出改进建议
n = $_POST['catname'];
foreach($n as $row => $value){
$para = $value;
}
$param = $imgID;
$check = $db->prepare("SELECT imgid , categoryid FROM catType WHERE imgid = $param AND categoryid= $para");
$check->execute();
$count = $check->fetchColumn();
//echo var_dump($check);
if($count > 0) {
echo "Category already added";