【发布时间】:2014-03-12 06:06:32
【问题描述】:
我遇到了一个简单的 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_to_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_náme, p1_désc)。它返回 (1, null, null)
如果我将其更改为 (1,p1_name, p1_desc),它将返回 (1,p1_name, p1_desc)。
更新日期 2: 由于 Andrew Mackrodt 的评论解决了问题^^
【问题讨论】:
-
发布您用于获取数据的 php 代码。
-
是的,你漏掉了出错的部分。我敢打赌,您正在尝试将值作为数组回显,但您将其作为对象获取。
-
包含您要打印结果的代码。
-
嗯,所以打印没有问题。 Nombre 和 Description LOB 或其他字段 FETCH_OBJ 可能有问题吗?
-
您对这些列使用什么排序规则?例如。如果您使用
utf8_general_ci,您可能需要为连接设置字符排序规则:$this->conn->exec('SET NAMES utf8');。或者,最好在连接字符串"mysql:host=$host;dbname=$dbname;charset=utf8"中设置字符排序规则。