检查数据库是否存在记录

时间:2015-12-15 03:18:04

标签: php mysql sql pdo

enter image description here我正在研究另一个类项目,我想做的是检查数据库是否存在行。

我在整个论坛中看到过几种不同的方法,但其中没有一种方法似乎有效。我在这一件事上花了大约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中运行了查询,该公式适用于我希望它做的事情。

2 个答案:

答案 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";