检查数据库中是否已存在记录

时间:2013-11-28 14:37:15

标签: php mysqli

我正在尝试设置一项调查,以衡量我们的电子商务客户的客户满意度。该调查通过电子邮件中的链接与URL中传递的订单参考链接,以便调查页面可以通过$ _GET global检索它。页面重新加载以验证答案,然后它应该检查是否已经为给定的订单参考提交了调查,然后提交并指向感谢页面或者只是重定向到一个页面,说明调查已经提交过。

我遇到的问题是 mysqli_num_rows($ result)似乎总是返回值0,无论数据库中有多少条目!

sql查询在phpmyadmin中运行正常,订单引用的格式为1854/110913/01。任何想法,因为我已经尝试了我可以在网上找到的每一个例子,它仍然无效。

if (isset($_GET[ref]))
    {
    $ord = test_input($_GET[ref]);
    }
else
    {
    $ord = test_input($_POST[ref]);
    }

$query = "SELECT count(*) FROM sat_survey WHERE ord_ref='$ord' ";
$result = mysqli_query($con, $query); 

if (mysqli_num_rows($result) > 0)
    {
    // redirect to other page.
    header('LOCATION: survey_duplicate.php');
    exit;   
    }
else
    {
    // insert survey answers into database
    $sql="INSERT INTO sat_survey (survey_id, ord_ref, website, q1, q1a, q2, q3, q4a, q4b, q4c, q5, q6, q7, q7a, q8, q9, q10, q11)
    VALUES
    ('null','$_POST[ref]','$_POST[web]','$_POST[q1]','$_POST[q1a]','$_POST[q2]','$_POST[q3]','$_POST[q4a]','$_POST[q4b]','$_POST[q4c]','$_POST[q5]','$_POST[q6]','$_POST[q7]','$_POST[q7a]','$_POST[q8]','$_POST[q9]','$_POST[q10]','$_POST[q11]')";

    if (!mysqli_query($con,$sql))
       {
       die('Error: ' . mysqli_error($con));
       }

    // close connection
    mysqli_close($con);

    // redirect to other page.
    header('LOCATION: survey_complete.php');
    exit;
    }

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望确保不会使用相同的订单号或电子邮件地址重复,对吧?

为什么不只是有一个查询来查看该订单号或电子邮件是否已经存在于数据库中,并返回一个回复,上面写着“您已经提交了回复”,或者甚至是他们已经提交的内容。

我不确定mysql_num_rows是最好的方法。相反,如

$query = "SELECT email, response FROM sat_survey WHERE email_address='$email' ";

还是其他类似的东西?你可以做像if

这样的事情
if ($email== $row['email']) {
echo 'you have already submitted a response: <br />';
echo $response;
}

答案 1 :(得分:0)

从电脑休息后清理我的脑袋并有条不紊地通过下面提到的检查清单加上各种在线示例我写了这个

        $query = "SELECT count(*) FROM sat_survey WHERE ord_ref='$ord' ";
        $result = mysqli_query($con, $query); 

        if (mysqli_num_rows($result) > 0)

替换此

        $query = "SELECT survey_id, ord_ref FROM sat_survey WHERE ord_ref = '$_POST[ref]' ";

        if ($result=mysqli_query($con,$query))
            {
            // Return the number of rows in result set
            $rowcount = mysqli_num_rows($result);
            mysqli_free_result($result);
            }   


        if ($rowcount >=1)

现在看起来效果很好。

答案 2 :(得分:-1)

实际上,如果你的表中有条目,mysqli_num_rows($ result)应该根据你的代码一直返回1。当您使用COUNT(*)时,即使计数为零,也始终会返回一行。

再次在您的查询中,您不必选择所有列,您可以指定一列,最好选择一列作为主键。

$query = "SELECT count(survey_id) AS surveyCounts FROM sat_survey WHERE ord_ref='$ord' ";

您必须删除count(*)或获取计数结果(*)作为变量。

所以试试:

$row = mysqli_fetch_assoc($result);
if ($row['surveyCounts'] > 0) //instead of if (mysqli_num_rows($result) > 0)