0

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值

我正在开发一个基本站点,我对 php 的了解很少,但我正在努力解决它。当我尝试从 sql 查询中声明两个变量($lat, $lon)填充它们时,我得到一个错误返回。我得到的错误是

警告:mysql_result() 期望参数 1 是资源,布尔值在第 23 行的 /home/content/j/o/h/johnbeach2/html/findtechkids.com/zip2.php 中给出

警告:mysql_result() 期望参数 1 是资源,布尔值在 /home/content/j/o/h/johnbeach2/html/findtechkids.com/zip2.php 第 24 行数组中给出

我的页面代码如下,我敢肯定我的逻辑是可怕的,但我是php新手,愿意学习!

<?php

$username="johnsmith";
$password="notactuallymypassword";
$database="somedb";
$host="notmydb.gullible.net";



$userzip = $_POST['userzip'];


mysql_connect($host,$username,$password);

@mysql_select_db($database) or die( "Unable to select database");



$mysqli="SELECT lat, lon FROM `zipdb` WHERE zip = '$userzip'";
$result=mysql_query($query);

$r=0;
$lat=mysql_result($result,$r,"lat");
$lon=mysql_result($result,$r,"lon");

echo "$lat  $lon";


function zipcodeRadius($lat, $lon, $radius)
{
    $radius = $radius ? $radius : 20;
    $query="SELECT distinct(zip) FROM zipdb  WHERE (3958*3.1415926*sqrt((lat-'.$lat.')*          (lat-'.$lat.') + cos(lat/57.29578)*cos('.$lat.'/57.29578)*(lon-'.$lon.')*(lon-    '.$lon.'))/180) <= '.$radius.';";
$result1=mysql_query($query);
$zipcodeList = array();
return $zipcodeList;
}



echo zipcodeRadius($lat, $lon, 5);

mysql_close();

?>

我将非常感谢任何反馈,尤其是我遇到的错误,但任何代码改进或建议都非常受欢迎。在此先感谢,哈里森。

4

1 回答 1

1

您的查询为空。应该:

$mysqli="SELECT lat, lon FROM `zipdb` WHERE zip = '$userzip'";
$result=mysql_query($mysqli); // <---- false

所以,mysql_query返回false,这就是为什么这个脚本说你boolean given instead of resource

要诊断这种情况,您可以在程序中放置一些var_dumpsvar_exports以查看变量的实际值。

任何代码改进或建议都非常受欢迎

使用mysql_query显式返回的连接链接:

$connection = mysql_connect($host,$username,$password);
mysql_select_db('mydatabase', $connection) or die ('could not select database mydatabase');
$resource = mysql_query('INSERT INTO mytable SET key = "val"',$connection) or die('something weird is happening');
$last_mytable_id = mysql_insert_id($connection);

使用PDOandprepare语句代替mysql_函数:

$sql = 'SELECT lat, lon FROM `zipdb` WHERE zip = :userzip';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':userzip' => $userzip));
$result1 = $sth->fetchAll();
$sth->execute(array(':userzip' => $userzip2));
$result2 = $sth->fetchAll();

它将使您免于一些错误,首先要提到的是,它将使您免于SQL Injections(所谓的Bobby Tables)。

于 2012-08-01T01:05:36.800 回答