2017-05-05 63 views
0

在下面的代码片断中,我明白mysqli_fetch_row仅适用于列索引(0,1,2等),而不是列名称。为什么一个php语句可以工作而另一个不可用?

但我认为使用列号/订购不好的做法(如果订单更改?)。

如何返回单个行,然后使用列名来获取数据?

$query = "Select * from users where UserEmail = '" . $UserEmail . "' LIMIT 1"; 

    $result = mysqli_query($connection, $query); 

    $num_rows = mysqli_num_rows($result); 
    $row = mysqli_fetch_row($result); 

    $arr = $result->fetch_assoc(); 
    $log->lwrite('Works/value: ' . $row[0]); 
    $log->lwrite('Does not work/value: ' . $arr['userID']); 
+0

使用'while'循环并为每个想要引用的列分配一个变量。 –

+0

但'极限1'保证我只得到一行......也许这就是我的心智模型不符合现实的地方:) – 11teenth

+0

是的,那样做会好起来的;-)虽然可以使用极限1,10类型的东西 –

回答

0

它不工作,因为fetch_row将结果的指针移动到第二行。并且没有第二行,因为您的查询中有LIMIT。

刚刚删除第一个抓取就足够了。

$query = "Select * from users where UserEmail = '" . $UserEmail . "' LIMIT 1"; 

$result = mysqli_query($connection, $query); 

$arr = mysqli_fetch_assoc($result); 
$log->lwrite('Does work now/value: ' . $arr['userID']); 

同时混合面向对象的风格和过程风格被认为是不好的做法。我在这里使用了第二个。

+0

非常感谢!我没有意识到我使用$ row = mysqli_fetch_row($ result);正在干扰什么应该是一个简单的语法(拉特定的领域/专栏)。 – 11teenth

相关问题