如果我将其限制为一个,我应该检查多行吗? (mysqli)

问题描述:

我正在从MySQL转换到MySQLi,我注意到如果我限制在mysql查询中的一行,是否有必要检查一下行数是否为1?毕竟,可以返回的行为0或1如果我将其限制为一个,我应该检查多行吗? (mysqli)

这是我目前使用的(未经测试,因为我从MySQL转换为mysqli的)代码:

$query = "SELECT email,auth,username FROM user_list WHERE id = '".$user["id"]."' LIMIT 1"; 
$query = $mysqli->query($query); 

if($query and $query->num_rows() == 1) 
{ 

你应该检查的一切是,如果一个查询返回0或更多行。 它不会返回超过LIMIT子句所指定的值,但如果找不到匹配项,它可以返回0。


Btw,MySQLi只是一个扩展,允许你访问MySQL 4.1+提供的功能。它仍然是MySQL。

+0

是的,但如果有的话,我更喜欢使用OOP。由于我对PHP使用OOP是新手(我已经使用另一种语言编写了oop),因此我使用mysqli来理解oop在oop中的工作方式。 谢谢。 – qaisjp 2012-07-14 23:32:03

在MySQL,它的保证您将不会返回比LIMIT条款中指定的更多的行。您无需担心被赋予多于一行。

由于您的查询在表的主键上包含WHERE子句,因此它永远不会返回多行。
因此,在此查询中,LIMIT 1是完全无用的(但完全没有错误)。

我会将其删除。

$query = "SELECT email,auth,username FROM user_list WHERE id = '".$user["id"]."'"; 
$query = $mysqli->query($query); 

if($mysqli->errno==0 and $query->num_rows == 1) 
{ 
+0

是的,但MySQL是否自动执行此操作(如果它的主键限制为一行,我已经知道它会返回一行,但为什么只有一行会返回时循环其他行) – qaisjp 2012-07-14 23:34:44

+0

没有循环上面的代码。根据定义,主键在列中不允许多次使用相同的值。所以,WHERE子句不能返回多行! – Jocelyn 2012-07-15 00:34:37

+0

是的,由于显而易见的原因,WHERE子句不能返回多个行,但SQL仍然循环表中的所有行。限制1停止在找到一行后循环表格的行。这是优化的。 – qaisjp 2012-07-15 00:48:31