php - mysql_query ("SELECT...") 为不存在的主键值返回 NULL 值行,呈现 (mysql_num_rows > 0) 检查无用

标签 php mysql null row

我对将 mysql 与 php 结合使用还很陌生,这是我在网上找到的检索结果的内容:

$con = mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("Cannot connect to the database");
$query = "SELECT ... FROM ... WHERE ID=5";
$result = mysql_query($query);
$num = mysql_num_rows($result);
if ($num > 0 ) {
    // do stuff
} else {
    // inform user
}
mysql_close($con);

ID是我表的自动生成的非空主键。现在,我的表中有 20 条记录。如果我输入 ID与这些现有记录中的任何一个对应的值,一切顺利并按预期工作。

但是,如果我输入 ID例如,54 的值或与我现有的 20 条记录中的任何一条都不对应的任何值(意味着不存在具有此类 ID 的行),我期望 $num <= 0我的条件语句将转到 else堵塞。但我发现情况并非如此 - 它仍然转到 TRUE分支并前进到// do stuff block ,所以我在 phpmyadmin 上运行了查询,发现我正好得到 1 行 NULL在所有领域。这就是为什么 $num正在返回 1这是>0 .

问题:

  1. 我该如何正确地检查不存在的行?这样我的脚本的其余部分只会在我实际获得包含数据的行时运行。
  2. 我找到了mysql_store_resultmysql_free_result在网上研究这个但是没有足够的信息来使它们正常工作。比如我将它们放在我的代码中的什么位置,为什么我可以在没有它们的情况下立即在 php 中做我需要做的事情,等等?
  3. 在 php 中处理 mysql 数据库时,我是否遗漏了任何“最佳实践”内容?
  4. 当我必须调用多个 sql 语句时,我所做的是循环遍历 $query - $result - $num我之前的过程 mysql_close我的连接。这是“最佳实践”吗?

非常感谢,伙计们,你们都很棒。

更新:包括整个查询

SELECT Dyna, 
       Floater, 
       Can.Label as CanLabel, 
       GROUP_CONCAT(DISTINCT Vanity.Name SEPARATOR ', ') as VanityName, 
       GROUP_CONCAT(DISTINCT Univ SEPARATOR ', ') as Univ, 
       ShopDate, 
       ManuDate, 
       FlipTran, 
       Remarks, 
       Bib, 
       Abbrev, 
       ShopChar, 
       Comment, 
       Value, 
       ERUSD 
       FROM 
       (Vanity INNER JOIN ((Vanity INNER JOIN Shoppy ON Vanity.VanityID = Shoppy.VanityID) INNER JOIN ShoppyVanity ON Shoppy.ID = ShoppyVanity.ID) ON Vanity.MethodID = ShoppyVanity.MethodID) INNER JOIN UAC ON (Shoppy.VanityID = UAC.VanityID) AND (Vanity.VanityID = UAC.VanityID) 
        WHERE (((Shoppy.ID)=5))

最佳答案

如果您使用组聚合函数,例如 GROUP_CONCAT,MySQL 将从您的整个结果集中创建一个组。如果没有结果,它将改为在 NULL 值上运行它们,从而产生一个空行。尝试将此添加到查询的最后,以删除其中没有有效数据的行:

HAVING VanityName 不为空

关于php - mysql_query ("SELECT...") 为不存在的主键值返回 NULL 值行,呈现 (mysql_num_rows > 0) 检查无用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776167/

相关文章:

javascript - 使用 JavaScript 和 PHP 作为 href 属性的值

php - 将我的 Google Chart(表格)数据导出到 excel 或 csv

mysql - 删除表的重复项

c - 如何使用英特尔 C 编译器为双函数返回 NULL?

java - Option[Long] 构造函数抛出 NullPointerException

PHP 和 MySQL : 2 requests or 1 request?

php - TYPO3 流体 xml 渲染

php - 内连接选择语句

mysql - 检查mysql用户是否存在

java - Hibernate 在 ManyToOne 关系中处理 long 0 值而不是 NULL