【问题标题】:mysql_num_rows() return 0 when using ANDmysql_num_rows() 使用 AND 时返回 0
【发布时间】:2012-08-29 10:03:04
【问题描述】:

我正在尝试根据这个查询在 wordpress 中检索行数:

protected function wp_has_facility($fid)
{
    //global $wpdb;

    $fid = intval($fid);

    $sql = "SELECT post_id FROM wprf_postmeta WHERE meta_value = '".$fid."' AND meta_key = 'facility_id'";
    $result = mysql_query($sql) or die(mysql_error());

    $num_rows = mysql_num_rows($result);

    echo $num_rows;

    return $num_rows;
}

$num_rows 在运行此函数时返回 0。

如果我回显查询字符串并在 phpmyadmin 中运行它,它会成功选择给我一些行。

经过进一步调查,看起来当我对 meta_value 进行硬编码时,它会给我一个行数。但如果我用变量填充字符串,它就不起作用了。

有什么想法吗?

【问题讨论】:

  • 您是否有任何带有 meta_key "thing_id" 的条目,或者它只是一个 var 的占位符,即$thing_id
  • 您确定有满足两个条件的数据集吗?除此之外,在 PHPMyAdmin 中尝试查询。
  • 一个查询可以成功并返回0行。显然,您的 AND 条件将查询限制为 0 行......即,没有任何内容与您传递的 meta_key 匹配。尝试使用 phpMyAdmin 或 MySQL Workbench 直接运行查询以进行验证。
  • thing_id 是什么?您的意思是:$result = mysql_query("SELECT * FROM wprf_postmeta WHERE meta_value = 123 AND meta_key = '$thing_id'") 或 die(mysql_error()); $num_things = mysql_num_rows($result);
  • 对不起,我应该提到 - 我确实在 phpmyadmin 中使用 AND 语句尝试过它,它确实返回行以及行数。但是在 PHP 中它没有

标签: php mysql sql


【解决方案1】:

这仅表示您的表当前不包含满足这两个条件的记录。

关于您的代码的备注:

连接不是必需的,您可以将查询替换为:

$sql = "SELECT post_id FROM wprf_postmeta WHERE meta_value = '$fid' AND meta_key = 'facility_id'";

mysql_* 函数已被弃用,您应该避免使用它们,因为它们将在 PHP 的未来版本中被删除。这里是the alternatives

【讨论】:

  • phpmyadmin 中的相同查询给了我匹配的记录
  • 我将完整的查询字符串从我的 PHP 脚本复制并粘贴到 phpmyadmin。 PHP 给我的 num_rows 为 0,phpmyadmin 给我 1。
  • @PhillTidd 也请复制粘贴到这里。尝试echo SQL 字符串,而不是 rownum。
  • @dezso SELECT post_id FROM wprf_postmeta WHERE meta_value = '21' AND meta_key = 'facility_id'
  • @PhillTidd 你确定$fid 不包含空格什么的吗?还有一个旁注:meta_value 是否包含数值?它的类型是什么?和wp_postmeta有区别吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多