PHP和MYSQL:Query在包含值的列上返回null
我对一个简单的SQL查询有一个问题:PHP和MYSQL:Query在包含值的列上返回null,php,mysql,Php,Mysql,我对一个简单的SQL查询有一个问题: SELECT a.idElemento, b.nombre, b.descripcion FROM productos_elementos a INNER JOIN elementos_adicionales b ON a.idElementoAdicional=b.id_elemento_adicional INNER JOIN precio_elemento c ON a.idElemento=c.idEl
SELECT a.idElemento, b.nombre, b.descripcion
FROM productos_elementos a
INNER JOIN elementos_adicionales b
ON a.idElementoAdicional=b.id_elemento_adicional
INNER JOIN precio_elemento c
ON a.idElemento=c.idElemento
WHERE a.idProducto = 1 AND c.idPolitica = 1
当我在数据库上执行此查询时,它返回:
IdElemento Nombre Descripcion
1 p1 p1_desc
2 p2 p2_desc
但是,我的PHP代码返回以下值:
IdElemento Nombre Descripcion
1 null null
2 null null
我不知道为什么会这样。有什么想法吗?
代码如下:
//$query is a string with the querty: SELECT....
$result = $this->conn->query($query);
$aux = $result->fetchAll(PDO::FETCH_OBJ);
$results_to_send = json_encode($aux);
如果此时打印$variable$results\u to\u send,则会将其初始化为:
[{"idElemento":"1","nombre":null,"descripcion":null},{"idElemento":"2","nombre":null,"descripcion":null}]
我使用这段代码中的值:
foreach ($results_to_send as $key => $value){
...
echo $value->idElemento //It prints 1 or 2
...
echo $value->nombre //It is null
...}
更新:
我终于找到了问题所在。我还不知道如何解决它,但这只是一个开始
问题是数据库中存储的字符串。两列都有带重音符号的字符。例如,第一行是:(1,p1_áme,p1_désc)。它返回(1,null,null)
如果我将其更改为(1,p1_name,p1_desc),它将返回(1,p1_name,p1_desc)
UDATE 2:
由于Andrew Mackrodt comment ^解决了问题,我遇到了相同的问题,这是由PHP的MySQLI和MySQL数据库之间的字符集不匹配引起的。并非所有字符集都具有相同的字符,这会导致PHP返回null 您可以通过使用$mysqli::set_charset(“short_name”)()查找数据库字符集(在phpmyadmin或类似查询中)和PHP中的set来比较和设置字符集 如果你想看看有哪些字符集可用,这里有一个列表。 对于PDO,只需执行以下操作:
$db = new PDO("mysql:host=host.address.com.br; dbname=yourdb; charset=utf8;", "username", "password");
$db->exec("set names utf8");
不要忘了将排序规则也定义为utf8
请参见发布您用来获取数据的php代码。是的,您已经泄露了出错的部分。我打赌你试图以数组的形式回显这些值,但你是以对象的形式获取的。包括打印结果的代码。嗯,所以打印没有问题。Nombre和Descripcion LOB或其他字段FETCH_OBJ可能有问题吗?这些列使用什么排序规则?例如,如果您使用的是
utf8\u general\u ci
您可能需要为连接设置字符排序规则:$this->conn->exec('set NAMES utf8')代码>。或者,最好在连接字符串中设置字符排序规则“mysql:host=$host;dbname=$dbname;charset=utf8”
。