为什么只有一些mysqli查询有效?

时间:2016-12-05 22:00:39

标签: php mysql sql angularjs mysqli

我遇到了mysqli选择查询的问题。 我正在使用的表称为参与者,并具有以下字段:

id int(11) AI PK
name varchar(255)
surname varchar(255)
birth varchar(32)
sex varchar(32)
email varchar(255)
telephone varchar(32)
club varchar(255)
startingGroup int(2)

这是一个PHP文件(名为select.php):

$connection = mysqli_connect("localhost", "$user", "$pass", "$db_name");

$query = "SELECT id, name, surname FROM participant WHERE NOT 0";

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if (!mysqli_query($connection, $query)) {
    printf("Errormessage: %s\n", mysqli_error($connection));
}

$result = mysqli_query($connection, $query);
$arr = array();
if(mysqli_num_rows($result) != 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $arr[] = $row;
    }
}
mysqli_close($connection);
echo $json_info = json_encode($arr);

稍后由AngularJS调用:

$http.post("select.php").success(function(data){
console.log(data);
$scope.newparticipants = jsonFilter(data);
console.log($scope.newparticipants);
});

第一个console.log返回的值是' undefined'到第二个""。当我将查询更改为仅选择' id'整个工作和数据是可见的。有人猜到为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在数据库中发生了一些用utf8_general_ci编码的变音标记。我对发生的事情一无所知,因为有些查询是正确的,有些则没有。从特定范围中选择ID我收到了正确的结果。选择旁边的范围 - 我未定义。我发现很难发现问题出在编码上(只有一些行包含这些变音符号)。

如果您处于类似情况 - 请检查您的数据库是否存在某些非标准编码。如果是这样,只需在打开数据库连接后在代码中定义它,例如:

(程序式)

mysqli_set_charset($connection,"utf8");

(面向对象)

$mysqli->set_charset("utf8")

感谢大家尝试解决此问题。