php - 基本选择查询在页面中不返回任何内容,但在 phpMyAdmin 中获取结果

标签 php mysql phpmyadmin

我有一个非常基本的查询,raceid 与另一个表中的 ID 相关联。 “name”是一个 varchar 列。 注意:以下查询是 echo $sql 的输出:

SELECT * FROM runner WHERE raceid=738 AND name="Varsity"

我的 PHP 是这样的:

$sql = 'SELECT * FROM runner WHERE raceid=' . $raceid . ' AND name="' . $name . '"';

$stmt = $db->query($sql);

$row_count = $stmt->rowCount();
echo $row_count.' rows selected';

上面的代码中我没有准备用于调试的语句,我已经简化了代码。

当我在页面中运行它时,我收到“已选择 0 行”的回显。所以查询工作正常,但不匹配。我将完全相同的查询粘贴到 phpMyAdmin 中,并得到了我想要的匹配。

我已经检查了字符集 - 表和名称列都是 utf8。

如果我从查询中删除“name=”Varsity“”,查询会从右侧的表中生成结果 - 因此连接良好。搜索此名称时出现一些问题,但一切看起来都正常。

在这种情况下我还可以检查哪些其他内容来进行调试?

我也尝试过对名称进行反引号,甚至可以肯定的是,我已将“名称”列更改为不太模糊的内容:

$sql = "SELECT * FROM runner WHERE raceid=$raceid AND `racername`='$racerename' ";

准备好的语句也不起作用

$stmt = $db->prepare("SELECT * FROM runner WHERE raceid=:raceid AND racername=:racername");
$stmt->execute(array(':raceid' => $raceid, ':racername' => $racername));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$row_count = $stmt->rowCount();

echo $row_count; // outputs 0

正如我之前所说,如果我从查询中删除名称/赛车名称,查询就会起作用。它检索许多与 raceid 匹配的结果。在这些结果中还有我正在寻找的赛车手姓名。 IE。数据库连接绝对有效,它是正确的数据库。 另外如果我删除 raceid,然后只搜索 racername,它也可以正常工作并检索所有结果。那到底怎么样?这是一个非常简单的查询,匹配两件事。

最佳答案

我猜你使用 PDO 并且正如我评论的那样

http://php.net/manual/en/pdostatement.rowcount.php

PDOStatement::rowCount() 不返回受 SELECT 语句影响的行数。

所以也许你可以这样通过:

$sql = 'SELECT * FROM runner WHERE raceid=' . $raceid . ' AND name="' . $name . '"';
$stmt = $db->query($sql);
$rows = $stmt->fetchAll();
echo count($rows).' rows selected';

这里是更安全的变体,可以避免 SQL 注入(inject):

$sql = 'SELECT * FROM runner WHERE raceid = :raceid AND name = :name';
$stmt = $db->prepare($sql);
$stmt->bindParam(':raceid', $raceid, PDO::PARAM_INT);
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll();
echo count($rows).' rows selected';

关于php - 基本选择查询在页面中不返回任何内容,但在 phpMyAdmin 中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37821330/

相关文章:

php - Docker phpmyadmin忽略了我的php.ini配置

php - Bogo 插件 : Post in alternative language appears on blog despite draft, 预定或 bin 状态

PHP 取消设置 sql 查询

php - 这是 mysql_real_escape_string 的正常行为吗?

php - MySQL PHP Integer列未作为字符串返回

mysql - 如何在MYSQL中真正清除缓存?

mysql - 表格排序后如何获取行的位置?

mysql - (html) phpmyadmin 中文本字段的所见即所得编辑器

mysql - 如何在 MySQL 中匹配带有转义引号字符的字符串?

php - 使用 PHP 在一个查询 MySQL 中插入数千行