这就是我在做的事。
它总是会转到“坏查询”部分。要么我的查询是错误的,要么我的if语句不工作。
这是我的密码。还有,有更干净的方法吗?
// Check if there's a version in URL. If not, set to empty.
$get_version = isset($_GET['version']) ? $_GET['version'] : '';
// Set defaults if nothing in URL
$query = "SELECT * FROM sn_hockey_versions ORDER BY version_id DESC LIMIT 1";
mysqli_query($db, $query) or die('Error querying database.');
$result = mysqli_query($db, $query);
while ($row = mysqli_fetch_array($result)) {
$newest_version_id = $row['version_id'];
$newest_sections = $row['sections'];
}
if (!empty($get_version) && preg_match('/^[0-9.]*$/', $get_version)) {
$query = "SELECT version_id, sections FROM sn_hockey_versions WHERE version = '".$get_version."'";
mysqli_query($db, $query) or die('Error querying database.');
$result = mysqli_query($db, $query);
if ($row = mysqli_fetch_array($result)) {
$set_version = $row['version_id'];
$v_sections = $row['sections'];
$test = "IT WORKS!!!!";
}
else {
$set_version = $newest_version_id;
$v_sections = $newest_sections;
$test = "Bad query";
}
}
else {
$set_version = $newest_version_id;
$v_sections = $newest_sections;
$test = "Set default";
}发布于 2016-10-12 18:00:24
您的条件if语句正在检查是否将$rows设置为mysql_fetch_array($result),而不是它是否返回任何结果。如果查询返回结果,条件语句返回true,则将$row设置为结果数组,并且您的If块将被计算。否则,$row设置为null,使条件为false,而set块将计算结果。
因为您的else语句是计算的,所以我认为查询存在问题,可以通过打印数组的结果来进行测试。虽然有许多方法可以检查查询是否返回任何结果,但为了避免代码中的混淆,在获取结果之前检查mysql_num_rows的值将是一个更好的解决方案:
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_array($result)有关mysqli_num_rows的更多信息,请查看http://php.net/manual/en/mysqli-result.num-rows.php
另见:query() returned any results?
提高代码效率的另一个建议是:只在必要时查询数据库的默认版本。太多不必要的查询会导致数据库性能问题。实现这一目标的一种方法是将默认版本查询放入函数中,并仅在"bad query“"set default”块中调用它。我希望这能帮到你。
发布于 2016-10-12 17:53:43
若要在代码之外检查查询是否成功,请复制查询并在phpmyadmin或ssh中运行该查询,以查看它是否返回结果。如果它返回结果,那么在您的代码中添加一些停止检查,以查看您得到了什么。就像这样
echo '<pre>jwow',print_r($result,1),'</pre>';
die('here');只要把你想检查的结果放在下面就行了。我喜欢用不同的名字命名查询结果。比如$defaults_results和$version_results。如果是“坏的查询”,您将发现您的错误后,尝试。如果它在phpmyadmin中没有返回任何结果,那么读取它给出的错误。
https://stackoverflow.com/questions/40004742
复制相似问题