2012-11-01 40 views
-1

我已经创建了$login_clients形式的MySQL数据库,其中$login是一个php变量,具体取决于用户登录名。我试图插入到这个数据库中,但一直没能用变量调用它。任何帮助是极大的赞赏!这里是我的代码: INSERT INTO数据库中包含变量名称

$login = clean($_POST['login']); 
require_once('user-config.php'); 
//Connect to mysql server 
$link2 = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
if(!$link2) { 
    die('Failed to connect to server: ' . mysql_error()); 
} 

//Select database 
$db = mysql_select_db(DB_DATABASE); 
if(!$db) { 
    die("Unable to select database"); 
} 
//Create INSERT query 
$qry2 = "INSERT INTO `{$login}_clients` (AgentClients) VALUES('$login')"; 
$result = @mysql_query($qry2); 
if($result2) { 
    header("location: client-register-success.php"); 
    exit(); 
}else { 
    die("Query failed"); 
} 
+1

出了什么问题?使用'mysql_error()'来得到确切的错误信息。另见http://php.net/manual/en/security.database.sql-injection.php –

+0

@Pekka感谢您的回复!我已经发现了这个问题。基本上,我在这之前写入另一个数据库中的表。有没有办法正确关闭一个数据库连接,并打开另一个数据库? –

回答

1

使用这种

INSERT INTO `{$login}_clients` (AgentClients) VALUES('$login') 

意味着你在行中插入一个新的表中的每个客户端,我想它不存在,是你想要的吗?因此,例如说三个客户登录,说ABC现在您的查询就会像

INSERT INTO `a_clients` (AgentClients) VALUES('$login') 

INSERT INTO `b_clients` (AgentClients) VALUES('$login') 

INSERT INTO `c_clients` (AgentClients) VALUES('$login') 

,所以这是不这样做是因为三排插入实际上没有按三个不同的表的正确方法不存在

+0

不,对于每个注册的客户端,该客户端登录名应该插入$ login_clients –

+0

@BlaineHurtado ya下的预先存在的表中,所以这样做不会,$ login会简单地替换查询中的表名并且失败 –

+0

基本上,客户端在代理下注册。所以我将其更改为{$ agentlogin} _clients。这意味着当客户端注册时,它将其客户端登录存储在代理数据库中。这样,代理商可以跟踪他们的客户。但是,我仍然收到查询失败。 –

0
  1. 干净的功能是什么? PHP没有这样的功能。如果它的用户定义,这个函数里面是什么。

    $ login = clean($ _ POST ['login']);

  2. U have used used $result2。然而,你已经分配$result = @mysql_query($qry2); 会给出错误。

    if($result2) { header("location: client-register-success.php"); exit(); }else { die("Query failed"); }

0

什么是干净的()函数在做什么?出于安全考虑,请考虑使用sprintf()和mysql_real_escape_string()。

$login = clean($_POST['login']); /* What is clean() doing? */ 
require_once('user-config.php'); 
//Connect to mysql server 
$link2 = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
if(!$link2) { 
    die('Failed to connect to server: ' . mysql_error()); 
} 

//Select database 
$db = mysql_select_db(DB_DATABASE); 
if(!$db) { 
    die("Unable to select database"); 
} 
//Create INSERT query 
$qry2 = sprintf("INSERT INTO `{$login}_clients` (AgentClients) VALUES('%s')", $login); 

$result = @mysql_query($qry2); 
if($result2) { 
    header("location: client-register-success.php"); 
    exit(); 
}else { 
    die("Query failed"); 
} 
+0

'function clean($ str){ \t \t $ str = @trim($ str); \t \t if(get_magic_quotes_gpc()){ \t \t \t $ str = stripslashes($ str); \t \t} \t \t return mysql_real_escape_string($ str); \t}' –

+0

在这种情况下,只需从sprintf()中删除mysql_real_escape_string() –

0

所有mysql_XXX函数都带有一个可选的链接说明符参数。它默认为以mysql_connect()打开的最后一个链接,但为了避免在打开多个链接时可能出现混淆,您应该明确指定它。尝试将此参数添加到您的呼叫中,并查看它是否可以解决问题。

另外,mysql_XXX函数已被弃用。你应该使用mysqli或PDO。然后你不会遇到这个问题,因为这些API的链接参数不是可选的。