0

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、select でブール値が指定されています

私は初歩的なサイトに取り組んでおり、php の知識は非常に少ないですが、それをなんとかしようとしています。2 つの変数 ($lat、$lon) を SQL クエリから入力して宣言しようとすると、エラーが返されます。私が得るエラーは

警告: 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();

?>

特にエラーが発生している場合は、フィードバックをいただければ幸いですが、コードの改善や提案は大歓迎です。事前にありがとう、ハリソン。

4

1 に答える 1

1

クエリが空です。次のようにする必要があります。

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

だから、 をmysql_query返しますfalse。それが、このスクリプトが you と言っているのはそのためですboolean given instead of resource

この種の状況を診断するには、いくつかのvar_dumpsまたはvar_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 に答える