在php附近的邮政编码页面返回sql错误

时间:2012-08-01 01:03:52

标签: php mysql

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

我正在建立一个基本的网站,我对PHP的了解很小,但我正试图用它来实现。当我尝试声明从sql查询填充它们的两个变量($ lat,$ lon)时,我收到一个错误。我得到的错误是

  

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

     

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

我的页面代码如下,我确信我的逻辑很可怕,但我是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();

?>

我非常感谢任何反馈,尤其是我收到的错误,但任何代码改进或建议都非常受欢迎。提前致谢, 哈里森。

1 个答案:

答案 0 :(得分: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);

使用PDOprepare语句代替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)。