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 の使用でデータを渡す方法でエラーが発生していると思います。正直なところ、JavaScript とデータを操作できるように、最小のフットプリントで MySQL からデータを取得したいだけです。余分なデータを取り除く (および/または 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 に答える