PHP 或 SQL 问题

标签 php mysql sql

我的 PHP 代码出现了一个奇怪的问题。这是我的代码。

$c=mysqli_connect('localhost','root','*************');
$a=0;
if($b=mysqli_num_rows(mysqli_query($c,$z="SELECT COUNT(*) FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'wallets' AND `TABLE_NAME` = '".$_SESSION['uname']."'"))!=0)
{
  print("<b>Wallet found</b>$b - $z");
  $a=1;
}
if(!$a)
{
  print("<b>No accounts found :(</b>");
}
?>

这段代码返回这个

Wallet found1 - SELECT COUNT(*) FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'wallets' AND `TABLE_NAME` = 'ShadowRi5ing'

它应该返回这个

No accounts found :(

我在 PhpMyAdmin 中输入了相同的查询,它返回了这个

COUNT(*)
0

请帮我修复php代码!谢谢:)

编辑:通过这样做解决了问题...

$q=mysqli_query($c,$z="SELECT COUNT(*) FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = 'wallets' AND `TABLE_NAME` = '".$_SESSION['uname']."'");
$row=mysqli_fetch_array($q);
if($row['COUNT(*)'])
{
  print("<b>Wallet found</b> {$row['COUNT(*)']} - $z - $a");
  $a=1;
}

最佳答案

您的查询正在检查返回的行数。当您选择没有聚合的 count(*) 时,您将始终获得一行。该行的值可能是 0,但您会得到一行。

您应该检查返回值。或者删除 count() 并从找到的每一行中返回值。

我的建议是将查询更改为:

SELECT 1
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA` = 'wallets' AND `TABLE_NAME` = '".$_SESSION['uname']."'
LIMIT 1;

如果找到任何内容,您将返回 1 行。如果没有,您现有的逻辑将起作用。

关于PHP 或 SQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592098/

相关文章:

php - Cron 作业不是每 30 分钟开始一次

php - 在单独的日/月/年部分显示 new() 数据?

php - yii CDbCriteria 和 join 语句中的子查询

mysql - 如何在单个查询中选择具有多个特定列值的行?

FreeBSD jail 上的 PHP、Apache 和 MySQL

MySQL 表 - 性能、索引数量

php - 向多个收件人发送电子邮件时出现问题

mysql - 在 WHERE LIKE 子句中选择

sql - GROUP BY ID 后跟parent_id

SQL - 时间序列 - 对于缺失值返回 0