我有一个用PHP编写的MySQL查询:
$merkki = $_GET["merkki"];
// Retrieve all the data from the table
//to show models based on selection of manufacturer
$result = mysql_query("SELECT * FROM Control_Mallit WHERE merkki_id = $merkki")
or die(mysql_error());
echo '{';
while($row = mysql_fetch_array($result)){
echo '"' . $row['id'] . '"' . ":" . '"' . $row['malli'] . '"';
}
echo '}';结果是正确的,但是我怎样才能在每条记录后得到一个逗号呢?如果我在每一行后面回显(,),我的代码就不能工作。我需要它的格式如下所述。
{
"":"--",
"series-1":"1 series",
"series-3":"3 series",
"series-5":"5 series",
"series-6":"6 series",
"series-7":"7 series"
}做这件事最好的方法是什么?
发布于 2012-10-16 07:38:23
立即停止使用你的代码。它容易受到SQL注入的攻击。想一想,如果merkki的值是1 OR 1=1,会发生什么。该语句将返回所有记录:
SELECT * FROM Control_Mallit WHERE merkki_id = 1 OR 1=1您需要使用mysqli_或PDO函数将参数绑定到查询(mysql_函数是being deprecated。另外,使用列列表,不要使用SELECT *。
以下是使用mysqli_ (未经过测试)的可能解决方案:
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
/* check connection */
if (!$link) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$array = array();
/* create a prepared statement */
$stmt = mysqli_prepare($link, "SELECT id, malli FROM Control_Mallit WHERE merkki_id = ?");
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, 'i', $_GET[merkki]);
/* execute query */
$result = mysqli_stmt_execute($stmt);
/* fetch associative array */
while ($row = mysqli_fetch_assoc($result)) {
$array[] = '"' . $row['id'] . '"' . ":" . '"' . $row['malli'] . '"';
}
/* free result set */
mysqli_free_result($result);
/* close connection */
mysqli_close($link);
echo '{' . implode(',', $array) . '}';
?>编辑
遵循您的原始代码,此解决方案应该可以工作:
$merkki = $_GET["merkki"];
$array = array();
// Retrieve all the data from the table to show models based on selection of manufacturer
$result = mysql_query("SELECT * FROM Control_Mallit WHERE merkki_id = $merkki")
or die(mysql_error());
while($row = mysql_fetch_array($result)){
$array[] = '"' . $row['id'] . '"' . ":" . '"' . $row['malli'] . '"';
}
echo '{' . implode(',', $array) . '}';发布于 2012-10-16 07:36:35
我只是将所有内容都放在一个数组中,并使用json_encode()输出它,例如
$data = array();
while ($row = mysql_fetch_array($result)) {
$data[$row['id']] = $row['malli'];
}
echo json_encode($data);这里有个小例子-- http://codepad.viper-7.com/My27XJ
此外,您不应该使用不推荐使用的mysql扩展。相反,我推荐PDO,例如
$db = new PDO(/* connection details */);
$stmt = $db->prepare('SELECT id, malli FROM Control_Mallit WHERE merkki_id = ?');
$stmt->bindParam(1, $_GET['merkki']);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// and so on发布于 2012-10-16 07:37:41
尝试:
$merkki = $_GET["merkki"];
$merkki = mysql_real_escape_string($merkki);
// Retrieve all the data from the table to show models based on selection of manufacturer
$result = mysql_query("SELECT * FROM Control_Mallit WHERE merkki_id = $merkki")
or die(mysql_error());
$numRows = mysql_num_rows($result);
$row = 1;
echo '{';
while($row = mysql_fetch_array($result)){
echo '"' . $row['id'] . '"' . ":" . '"' . $row['malli'] . '"';
if ($row < $numRows) {
echo ',';
}
$row++;
}
echo '}';它只是使用行计数来确定是否应该基于最后一个结果回显一个逗号。
此外,请确保对传递给mysql查询的任何输入进行转义,否则容易受到SQL注入的攻击。请参阅有关将来切换到PDO或Mysqli的信息。
https://stackoverflow.com/questions/12905472
复制相似问题