2012-11-01 75 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的鏈接參數不是可選的。