我知道这很奇怪,但如果使用名为name的字段,我有一个select返回null。如果我删除它,那么它就工作了,而且我已经更改了表中的数据。如果我直接查询mysql,它会起作用。里面可能有什么东西,但我看不出有什么奇怪的。
任何可以帮助我调查的建议都是受欢迎的:(
class go {
function Query($sql){
$results = $this->db->query($sql);
if (mysqli_num_rows($results)<1){
throw new Exception('No Results');
}
$out = array();
while ($r = $results->fetch_object()){
$out[] = $r;
}
return json_encode($out);
$out = null;
}
}
$client = new go;
//not working
$sql = "select name from books limit 10";
$sql = "select name,description from books limit 10";
$sql = "select * from books limit 10";
// works!
$sql = "select description from books limit 10";
$data = $client->Query( $sql );
更新
我发现这个问题是由一些拉丁口音的字符引起的,比如óñé
DBMS一些保留关键字。Name是MYsQL中的保留名称。将名称更改为另一个列名,可能是name1。我认为这应该有效。mysql保留关键字检查列表https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-尾-N。
更新
在初始化与mySQL server usgset_charset()
方法的连接时,请尝试设置字符集。我使用以下字符集:
$this->db->set_charset('utf8mb4');
这可能会解决您的问题。
使用mysqli_set_charset($db,"utf8"(;