2011-05-29 78 views
0

我刚刚转到mysqli,我想知道:我可以使用预处理语句执行多个查询吗?使用MYSQLI准备多个预处理语句

下面是示例:我需要检查此用户名是否也在表“future_user”中,而不仅仅是在“用户”中,因为它现在正在执行。对于代码上诉,我宁愿不再写相同的功能,只是将“user”改为“future_user”。

function isFreeUsername($string) 
{ 
$DB = databaseConnect(); 

$stmt = $DB->prepare("SELECT * FROM user WHERE username=? LIMIT 1"); 
$stmt->bind_param("s", $username); 

if(isset($_SESSION) && isset($_GET['username'])) $username = $_GET['username']; 
else            $username = $string; 

$stmt->execute(); 
$stmt->store_result(); 

if($stmt->num_rows > 0) $return = 0; 
else      $return = 1; 

$stmt->close(); 
$DB->close(); 

return $return; 

}

表:

CREATE TABLE user 
(
uid  mediumint(6) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, 

username varchar(15) NOT NULL, 
password varchar(15) BINARY NOT NULL, 
mail  varchar(50) NOT NULL, 

name  varchar(50) NOT NULL, 
surname varchar(50) NOT NULL, 
birth char(10) NOT NULL, 
sex  tinyint(1) unsigned NOT NULL default 1, 

address varchar(50) NOT NULL, 
city  varchar(50) NOT NULL, 
zip  char(5) NOT NULL, 
province varchar(50) NOT NULL, 
country tinyint(3) NOT NULL, 

number1 varchar(50) NOT NULL, 
number2 varchar(50) NOT NULL, 

last_login TIMESTAMP,  
registered TIMESTAMP, 
online  tinyint(1) unsigned default 0, 

admin   tinyint(1) unsigned default 0, 
comment_allowed tinyint(1) unsigned default 0, 
post_allowed tinyint(1) unsigned default 0 

) ENGINE=InnoDB; 

CREATE TABLE future_user 
(
username varchar(15) NOT NULL, 
password varchar(15) BINARY NOT NULL, 
mail  varchar(50) NOT NULL, 

name  varchar(50) NOT NULL, 
surname varchar(50) NOT NULL, 
birth char(8) NOT NULL, 
sex  tinyint(1) unsigned NOT NULL, 

address varchar(50) NOT NULL, 
city  varchar(50) NOT NULL, 
zip  char(10) NOT NULL, 
province varchar(50) NOT NULL, 
country varchar(50) NOT NULL, 

number1 varchar(50) NOT NULL, 
number2 varchar(50) NOT NULL, 

code  char(10) NOT NULL 

) ENGINE=InnoDB; 

回答

1
"SELECT * 
FROM user u 
LEFT JOIN future_user fu on fu.id = u.id 
WHERE u.username=? 
LIMIT 1" 

无法看到更多的表结构,这是我能想出来的。 这将在未来的用户中选择用户

+0

我不确定这个连接:user和future_user都不是uid字段。这两个表中使用的用户名无关:一个持有注册用户,另一个持有该用户尚未确认。 – 2011-05-30 17:34:14

0

你可以做CROSS JOIN连接两个表,并询问他们的方式

SELECT * FROM user JOIN future_user 
    WHERE user.username = ? OR future_user.username = ? 

你可能需要调整*,以便两个表中名称相同的列不会相互重叠。

+0

加入,显而易见:我想我最好休息一会儿。谢谢! – 2011-05-29 23:43:34