Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和MYSQL:Query在包含值的列上返回null_Php_Mysql - Fatal编程技术网

PHP和MYSQL:Query在包含值的列上返回null

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

我对一个简单的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.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”