我收到错误: 消息:在GetPOI请求中未传递layerName参数。 致命错误:在非对象上调用成员函数prepare()
这是我创建PDO $ db
的地方function connectDb() {
try {
$dbconn = 'mysql:host=' . DBHOST . ';dbname=' . DBDATA ;
$db = new PDO($dbconn , DBUSER , DBPASS );
// set the error mode to exceptions
$db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
return $db;
}//try
catch(PDOException $e) {
error_log('message:' . $e->getMessage());
}// catch
}// connectDb
,这是发生错误的地方:
// $sql is returned as a PDO statement object.
$sql = $db->prepare( 'SELECT id,
imageURL,
title,
description,
footnote,
lat,
lon,
(((acos(sin((:lat1 * pi() / 180)) * sin((lat * pi() / 180)) +
cos((:lat2 * pi() / 180)) * cos((lat * pi() / 180)) *
cos((:long - lon) * pi() / 180))
) * 180 / pi()
)* 60 * 1.1515 * 1.609344 * 1000
) as distance,
iconID,
objectID,
transformID
FROM POI
WHERE POI.poiType = "geo"
HAVING distance < :radius
ORDER BY distance ASC
LIMIT 0, 50 ' );
我没有正确设置$ db吗?如果它有帮助,我也可以发布整个脚本。 感谢。
答案 0 :(得分:1)
问题在于$db
由于其范围而调用$db->prepare()
时未定义。
最有可能在函数内部调用$db>prepare()
;如果是这样的话,你可以通过将$db
作为参数传递给该函数来修复它,即
function doSomething(\PDO $db)
{
$sql = $db->prepare('...');
}
$db = connectDb();
doSomething($db);
另一个潜在问题是connectDb()
发生错误;你只记录错误,但函数仍然正常返回,因此在全局范围内仍然未定义$db
。