如何检查MySQL数据库中是否存在某个值

41
假设我有这个表格:
id | name | city
------------------
1  | n1   | c1
2  | n2   | c2
3  | n3   | c3
4  | n4   | c4

我想检查变量city中是否存在值为c7的元素。

如果有,我会执行某些操作。
如果没有,我会执行其他操作。

10个回答

74
使用现代的MySQLi:
$mysqli = new mysqli(SERVER, DBUSER, DBPASS, DATABASE);

$city = 'c7';
$result = $mysqli->execute_query("SELECT id FROM mytable WHERE city = ? LIMIT 1", [$city]);
if($result->num_rows == 1) {
    // found
}

使用传统的mysqli
$mysqli = new mysqli(SERVER, DBUSER, DBPASS, DATABASE);

$city = 'c7';
$stmt = $mysqli->prepare("SELECT id FROM mytable WHERE city = ? LIMIT 1");
$stmt->bind_param("s", $city);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows == 1) {
    // found
}

使用PDO:
$pdo = new PDO($dsn, $user, $pass, $options);

$city = 'c7';
$stmt = $pdo->prepare("SELECT id FROM mytable WHERE city = ? LIMIT 1");
$stmt->execute([$city]);
if($stmt->rowCount() == 1) {
    // found
}

3
像这个回答所建议的那样,使用SQL的EXISTS语句不是更好吗?链接为:https://dev59.com/yHI-5IYBdhLWcg3wxrqQ#1676573。 - lorenzog
从速度上来看,加上 LIMIT 1 会更快吗? - Ian Y.
2
@IanY。这取决于查询,但通常是的。看一下这个:https://dev59.com/7nRB5IYBdhLWcg3w9Lzn - Reinder Wit

18

精确匹配

"SELECT * FROM yourTable WHERE city = 'c7'"

用于模式/通配符搜索

"SELECT * FROM yourTable WHERE city LIKE '%c7%'"

当然可以将'%c7%'更改为'%c7''c7%',具体取决于您想要如何搜索它。对于精确匹配,请使用第一个查询示例。

PHP

$result = mysql_query("SELECT * FROM yourTable WHERE city = 'c7'");
$matchFound = mysql_num_rows($result) > 0 ? 'yes' : 'no';
echo $matchFound;

你也可以在那里使用if条件。


2
使用 ID 而不是星号(*)。应该使用 PDOMYSQLi - Jo Smo

1
这对我来说有效:


$db = mysqli_connect('localhost', 'UserName', 'Password', 'DB_Name') or die('Not Connected');
mysqli_set_charset($db, 'utf8');

$sql = mysqli_query($db,"SELECT * FROM `mytable` WHERE city='c7'");
$sql = mysqli_fetch_assoc($sql);
$Checker = $sql['city'];

if  ($Checker != null) {
    
    echo 'Already exists';
    
} else {

    echo 'Not found';
}


0
假设连接已建立并在全局范围内可用;
//Check if a value exists in a table
function record_exists ($table, $column, $value) {
    global $connection;
    $query = "SELECT * FROM {$table} WHERE {$column} = {$value}";
    $result = mysql_query ( $query, $connection );
    if ( mysql_num_rows ( $result ) ) {
        return TRUE;
    } else {
        return FALSE;
    }
}

用法: 假设要检查的值存储在变量 $username 中;

if (record_exists ( 'employee', 'username', $username )){
    echo "Username is not available. Try something else.";
} else {
    echo "Username is available";
}

0

我尝试了一段时间,代码如下: $sqlcommand = 'SELECT * FROM database WHERE search="'.$searchString.'";';
$sth = $db->prepare($sqlcommand); $sth->execute(); $record = $sth->fetch(); if ($sth->fetchColumn() > 0){}
当有两个相同的条目时,它可以工作,但是, 如果您将 if ($sth->fetchColumn() > 0){} 替换为 if ($result){} 它只需要一个匹配的记录就能正常工作,希望这能帮到你。


0

使用

select count(city) from mytable where city = 'c7'

这将仅从查询中发送单个值。如果它为0,则不存在,否则存在。由于您不会使用其他列值。


0
SELECT
    IF city='C7'
    THEN city
    ELSE 'somethingelse'
    END as `city`
FROM `table` WHERE `city` = 'c7'

-1

$result = mysqli_query($conn, "SELECT * FROM WHERE = ''"; $found = mysqli_num_rows($result) > 0 ? '是' : '否' ; echo $found;


2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

-1

如果你正在使用 PHP 8 版本,以下是我成功的解决方案:

$result = mysqli_query(database name, "SELECT id FROM mytable WHERE city = 'c7'");      
  
  if(mysqli_num_rows($result) == 0) {
       // Do Something 
  }
  else {
      // Do something else 
  }

我的答案和Reindeer Wit的不同之处在于'i'mysqli_querymysqli_num_rows()中的使用。

此外,还要在mysqli_query()中包括您正在使用的数据库名称的名称。


1
我发现Reinder Wit的答案有点过时。但实际上并不是这样的。它有两个部分。第一部分标记为首选,从PHP 5开始支持。你试图遵循标记为已弃用的部分,而这个部分自PHP 7以来就不再被支持了。 - Quentin

-1

匹配ID:

Select * from table_name where 1=1

匹配模式:

Select * from table_name column_name Like '%string%'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接