使用mysql查询从单列返回值

时间:2016-04-28 09:02:39

标签: javascript php mysql

我有一个php函数,它将从users数据库的列中获取名称列表。我想要做的是从列name获取所有值并将其插入到数组中。

我从php方面做的是:

header('Content-type: application/json');
include ('../Core/Initialization.php');

$courseName = $_POST['courseName'];
$semester = $_POST['semester'];

$sql = mysql_query("SELECT DISTINCT `name` FROM `users` WHERE `programme` = '$courseName' AND `semester` = '$semester'") or trigger_error(mysql_error().$sql);
$column = mysql_fetch_assoc($sql);

$arr = array();
foreach($column as $value) {
$arr[] = array('name' => $value['name']); //I have tried it this way but it didn't work when I try to display the values.
}

echo json_encode($arr);//I have tried to remove the array and just json_encode($column). I have successfully print out the first values, but fail to print out the next values collected from the column. 

将处理/打印出名称的js函数:

function nameProcess(data) {
alert(data.name); //This will only display the full values from the first(?) index

nameArray = data.name;

for (var i=0; i < nameArray.length; i++) {
alert(nameArray[i]);  //But, this loop only displays one character each time of the alert. Example: Each character from the word "Hello" will show up one by one as alert.
}
    }

});

有没有更好的方法呢?我想要做的是,将列name中的所有值导出到一个数组中,并将其每个值作为选择框的选项进行迭代。但就目前而言,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

  

首先,不要使用mysql_ *函数,因为它们已被弃用   完全删除了PHP 7。

回到你的问题,你只能用循环来获取带有MySQL的mysql多维数组。

更正后的代码:

$sql = mysql_query("SELECT DISTINCT `name` FROM `users` WHERE `programme` = '$courseName' AND `semester` = '$semester'") or trigger_error(mysql_error().$sql);
$res = mysql_query($sql); // Missing this.
$column = ;
$arr = array();
while ($value = mysql_fetch_assoc($res)) {
 $arr[] = $value['name'];
}
echo json_encode($arr);

答案 1 :(得分:0)

  

注意:不推荐使用您正在使用的PHP MySQL命令。建议使用PDO类(因为MySQLi也已弃用)。

这取决于您正在执行的预处理,但根据您提供的信息我可以看到,您将返回数据的每个元素传递到nameProcess

所以

的返回数据
array(
    array('name' => 'John Smith',
    array('name' => 'Jane Doe',
    array('name' => 'Foo Bar'
);

需要调用nameProcess函数3次。

所以每次你去定义

nameArray = data.name;

nameArray成为字符串,因为data.name是第一次调用的'John Smith','Jane Doe'是第二次调用,'Foo Bar'是最后一次调用。

所以当你打电话

alert(nameArray[i]);

它正在调用字符串中位置i的字符。

nameArray[0]; // 'J'
nameArray[1]; // 'o'
nameArray[2]; // 'h'
nameArray[3]; // 'n'
// etc

如果您将其更改为:

function nameProcess(data) {
    alert(data.name);
    nameArray = data.name;
    alert(nameArray);
}

它会提醒全名。

解决这个问题的方法是确保在没有预处理的情况下将JSON解析数据传递给函数,在这种情况下,如果您将原始代码更改为:

function nameProcess(data) {
    alert(data.name);

    nameArray = data.name;

    for (var i=0; i < nameArray.length; i++) {
        alert(nameArray[i].name);
    }
}