0
<?php
try {
   $conn = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password);
   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $data = $conn->query('SELECT id FROM products');
   foreach($data as $row) {
     $r[] = json_encode($row);
   }
} catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage();} 
?>

<script type="text/javascript">
var jArray = <?php echo json_encode($r); ?>;
function showme(j) {
    for(var i=0; i < j.length; i++){ document.write(j[i]); }
};
showme(jArray);
</script>

结果...

{"id":"172","0":"172"}{"id":"173","0":"173"}{"id":"174","0":"174"}...

注意额外的,"0":"172"

我相信我在如何在 PHP foreach 中传递数据或使用 PDO 时遇到了错误。老实说,我只想要最小的占用空间来从 MySQL 中获取数据,这样我就可以使用 JavaScript 和数据了。关于摆脱额外数据(和/或使用 PDO 的性能改进)的任何想法?请不要使用库,因为我必须(想要)使用纯 JavaScript 并限制服务器资源。

4

1 回答 1

3

您将获得数字索引和关联格式的结果,因为这是默认的 PDO 获取模式。这可以用 更改PDOStatement::setFetchMode

例如,将获取模式设置为将从结果数组PDO::FETCH_ASSOC中删除键并仅保留:0id

$data->setFetchMode(PDO::FETCH_ASSOC);
foreach($data as $row) {
    $r[] = json_encode($row);
}
于 2013-08-19T00:38:05.617 回答