2014-02-13 71 views
2

我有一個簡單的SQL查詢的一個問題:PHP和MySQL的:查詢返回null的列與值

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); 

如果我打印在這一刻$變量$ 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)。

UDATE 2: 問題解決了感謝Andrew Mackrodt評論^^

+0

發佈您的PHP代碼,您正在使用的數據也提取。 –

+0

是的,你已經放出了出問題的部分。我敢打賭,你試圖以數組的形式回顯這些值,但是你會以對象的形式獲取這些值。 – winkbrace

+0

在您打印結果的地方加入代碼。 – alexis

回答

2

我這是由不匹配的PHP中的MySQLi和MySQL數據庫之間的字符集導致了同樣的問題。並非所有的字符集都具有相同的字符,這會導致PHP返回null。

你可以比較和定位數據庫字符集(在phpMyAdmin或像this查詢)設置你的字符集,並使用$ mysqli的:: set_charset(「簡稱的」)(http://php.net/manual/en/mysqli.set-charset.php

如果你在PHP設置'我想看看有什麼可用的字符集列表。 http://dev.mysql.com/doc/refman/5.6/en/charset-charsets.html