我尝试使用PHP从PostgreSQL访问数据库。 我运行此代码,但出现错误:
VM6722:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at Object.success ((index):58)
at c (jquery-3.4.1.min.js:2)
at Object.fireWith [as resolveWith] (jquery-3.4.1.min.js:2)
at l (jquery-3.4.1.min.js:2)
at XMLHttpRequest.<anonymous> (jquery-3.4.1.min.js:2)
我想弄清楚,但是我对php很陌生。因此,我将感谢您提供任何解决此问题的建议。
<?php
$db = new PDO('pgsql:host=localhost;dbname=webmap103;', 'postgres', 'postgres');
$sql = $db->query("SELECT id, name, image, web, category,ST_AsGeoJSON(geom, 5) as geom FROM cdmx_attractions ORDER BY name");
$features = [];
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
$feature = ['type'=>'Feature'];
$feature['geometry'] = json_decode($row['geom']);
unset($row['geom']);
$feature['properties'] = $row;
array_push($features, $feature);
}
$featureCollection = ['type'=>'FeatureCollection', 'features'=>$features];
echo json_encode($featureCollection);
?>
我希望在Web应用程序上显示数据。 我正在使用html和ajax来调用php,以便在PostgreSQL上访问我的数据库。
答案 0 :(得分:0)
如果您的sql语句失败,git merge --continue
返回$db->query(...)
。检查您的sql语句是否有效并正确执行。如果它是false
,则会收到错误“致命错误:未捕获的错误:在bool上调用成员函数fetch()”
答案 1 :(得分:0)
PDO :: query()返回PDOStatement对象,如果失败则返回FALSE。
请勿使用Ajax调用您的PHP,至少要进行调试。看到错误会更容易。只需在浏览器中直接调用PHP路由即可。 json太糟了,无法在浏览器控制台中进行调试。
尝试捕获错误并使用PHP进行显示:
<?php
try{
$db = new PDO('pgsql:host=localhost;dbname=webmap103;', 'postgres', 'postgres');
$sql = $db->query("SELECT id, name, image, web, category,ST_AsGeoJSON(geom, 5) as geom FROM cdmx_attractions ORDER BY name");
$features=[];
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
$feature=['type'=>'Feature'];
$feature['geometry']=json_decode($row['geom']);
unset($row['geom']);
$feature['properties']=$row;
array_push($features, $feature);
}
$featureCollection=['type'=>'FeatureCollection', 'features'=>$features];
echo json_encode($featureCollection);
} catch (Exception $e) {
var_dump($e->getMessage());
var_dump($e->getCode());
}
}
?>
tail -f /var/log/php7.3-fpm.log
调用您的页面并观看您的外壳。