我是这么做的
- 我正在检查是否有一个"版本"值在URL $get_version.
- 从数据库中获取最新版本,并设置为默认变量。
- 如果URL变量是好的,检查数据库是否存在,然后设置适当的变量。
- 如果不存在,使用上面的默认值
它总是转到"错误查询部分"。要么我的查询是错误的,要么我的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";
}
你的条件if语句检查是否$rows设置为mysql_fetch_array($result),而不是它是否返回任何结果。如果查询返回结果,则条件语句返回true,将$row设置为结果数组,然后计算If块。否则,$row被设为null,使条件为假,并执行else块。
因为你的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
参见:检查mysql_query()是否返回任何结果的正确方法是什么?
为了使代码更高效,我的另一个建议是:只在必要时查询数据库的默认版本。太多不必要的查询会导致数据库性能问题。实现此目的的一种方法是将默认版本查询放入函数中,并仅在"bad query"set default"块中调用它。
要检查它在代码外部是否成功,复制查询并在phpmyadmin或通过ssh运行它,以查看它是否返回结果。如果它返回结果,那么在代码中放入一些停止检查,以查看得到的结果。Like so
echo '<pre>jwow',print_r($result,1),'</pre>';
die('here');
把它放在你想检查的结果下面。我喜欢用不同的名称来命名查询结果。比如$defaults_results和$version_results。如果它是得到"坏查询",你会发现你的错误后,尝试。如果在phpmyadmin中没有返回结果,那么读取它给出的错误。