检查数据库中是否存在值?

时间:2017-01-03 05:58:43

标签: php mysql

我将在前言中说我已经坚持了几天,我显然很新,并且知道我错过了一些简单的事情。我尝试了很多方法。安全性还不是问题,我只是想在自己的服务器上学习。

即使我知道价值不存在,我也总能得到“找到的东西”。我正在尝试在输入字段中输入一个短语,按提交并查看该值是否已存在于表

抱歉这个愚蠢的问题。

<?php
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
// error_reporting(0);
// ini_set('display_errors', 0); 
// exit();
//echo '<pre>';  print_r($user_info);  echo '</pre>';

if ( (isset($_POST['lookup'])) && ($_REQUEST['lookup'] =='1')) {
    echo 'you\'ve entered a keyword, lets see if it exsists!';
    $looksql = "SELECT * FROM `crm3`.`keywords` WHERE `KW0` LIKE '".$_POST['lookup']."' ORDER BY `ID` ASC ";
    if ($result = mysqli_query($db, $looksql)) {
        echo '<br>someting found';
    } else { echo '<br>nothing found'; }
} else {
    echo '<br>please enter a keyword to start the search';
}
?>

<br><br><br>
<form method="POST" action="./?action=kwcheck">
    <input type="hidden" name="lookup" value="1" />
    keyword lookup: <input type="text" name="keyword" /><br>
    <input type="submit" value="SEARCH" />

3 个答案:

答案 0 :(得分:2)

你做的几乎一切都正确,除了条件。您的情况总是给出真实价值。它应该是:

// Query the MySQL server.
$result = mysqli_query($db, $looksql);
if (mysqli_num_rows($result)) {
  // Rows are there.
  echo '<br>someting found';
} else {
  // No rows are there.
  echo '<br>nothing found';
}

如果您希望它起作用,您可以创建一个返回布尔值的函数:true,如果找到了项目,false,如果没有。

function recordsCount($looksql) {
  // Get the connection from global scope.
  global $db;
  // Query the MySQL server.
  $result = mysqli_query($db, $looksql);
  // Return if the count is greater than 0 or not.
  return (mysqli_num_rows($result) > 0);
}

安全问题:使用参数化查询。在查询中放置$_POST(或任何用户输入$_GET$_COOKIE等)可以打开SQL注入。此外,如果您想要完全匹配,请使用=,而不是LIKELIKE应该用于部分匹配并使用通配符(%)。感谢chris85

答案 1 :(得分:0)

你做错了

if ($result = mysqli_query($db, $looksql)){// this is always true as query will be executed always    
     echo '<br>someting found';    
}

上面的代码总是被执行,因为它就像是执行查询然后回显消息所以如果条件总是为真,请尝试下面的代码

$result = mysqli_query($db, $looksql);    
if (mysqli_num_rows($result)) {
     echo '<br>someting found';
}

答案 2 :(得分:-1)

你可以试试这个:

$looksql = "SELECT * FROM `crm3`.`keywords` WHERE `KW0` LIKE '%".$_POST['lookup']."%' ORDER BY `ID` ASC ";

%

之后使用like