2009-11-16 138 views
2

我决定从mysql更改为mysqli部分方式通过一个项目 - 并运行到此hicup。PHP - 使用mysqli获取单个结果

什么是实现这一目标的最佳途径: //检查用户名已被 $结果= mysql_result(的mysql_query( “SELECT COUNT(*)FROM用户其中username = '”。$用户名 “'”) );

我找不到mysql_result的确切版本

我已经试过这样:

$结果= mysqli_num_rows($ DB->查询( “SELECT * FROM用户其中username ='” $用户名。 。“'”))

这有效,但我认为在mySQL服务器上使用count会更容易。有没有更好的办法?

回答

2

如果您简单地试图确定用户名是否已存在,我可能会建议您将您的查询更改为“SELECT 1 FROM user WHERE username ='”。 $用户名。 “'”

$res = $db->query("SELECT 1 FROM user WHERE username='".$username."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 

这也是很好的做法逃避任何和所有的用户输入查询的数据库,你要离开自己敞开的SQL注入攻击之前。这里是安全的版本:

$res = $db->query("SELECT 1 FROM user WHERE username='". mysqli_real_escape_string($username) ."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 
+0

我已经有一个'干净'的功能,我运行所有的输入,虽然'$ input = mysqli_real_escape_string(htmlentities($ input,ENT_QUOTES))'谢谢你的额外想法:)无论如何,在地方'1' '*'是一个很好的补充,谢谢。 – Mark 2009-11-16 21:38:25

1

确保您有user表引用username列的索引和你所有的设置。你写的代码将起作用。

使用count()将不会产生任何影响,因为username应该是唯一的。如果你确定索引也是UNIQUE类型的,你将会执行唯一的用户名。