我正在尝试在 php 中的 HEREDOC 中创建循环。我知道这是不可能的,但这是我告诉我需要帮助的最好方法。这是我的代码:
<?
$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = '".$_GET['id']."'");
$sth->execute();
echo <<<HERE_DOC
[
while($row = $sth->fetch()){
echo '{"optionValue":"'.$row['field1'].'", "optionDisplay": "'.$row['field2'].'"},';
}
]
HERE_DOC;
?>
它告诉我这个
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /public_html/test.php on line 7
我认为它返回这个是因为不可能在 HEREDOC 中创建循环 - 但是否则我该怎么做..?
该脚本由 AJAX 使用以下脚本驱动:
<script type="text/javascript">
$(function(){
$("select#state").change(function(){
$.getJSON("test.php",{id: $(this).val(), ajax: 'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
$("select#city").html(options);
})
})
})
</script>
而最初的测试.php是这样的:
if ($_GET['id'] == "1234") {
echo <<<HERE_DOC
[
{"optionValue":"000", "optionDisplay": "a"},
{"optionValue":"300", "optionDisplay": "s"},
{"optionValue":"600", "optionDisplay": "d"},
{"optionValue":"700", "optionDisplay": "cr"},
{"optionValue":"500", "optionDisplay": "Gı"},
{"optionValue":"400", "optionDisplay": "K"},
{"optionValue":"800", "optionDisplay": "S"},
{"optionValue":"900", "optionDisplay": "ik"},
{"optionValue":"350", "optionDisplay": "Tu"}
]
HERE_DOC;
else if ($_GET['id'] == "2345") { etc......
问题是我已经在SQL数据库中拥有所有数据,并且由于有很多选项,我想仅根据先前选择列表中的id返回数据。
不要自己制作 JSON,请使用 json_encode
.
<?
$json = array();
$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = '".$_GET['id']."'");
$sth->execute();
while($row = $sth->fetch(PDO::FETCH_ASSOC)){ // added PDO::FETCH_ASSOC
$json[] = array(
'optionValue' => $row['field1'],
'optionDisplay' => $row['field2']
);
}
echo json_encode($json);
?>
附言不要像那样直接使用$_GET
。 你容易受到 SQL 注入的影响。 您已经在使用 PDO,请正确使用它。 你应该这样做:
$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = ?");
$sth->execute(array($_GET['id']));