2013-05-07 41 views
1
添加在MySQL

我用下面的代碼來檢查柱存在,如果沒有,添加它:檢查列上存在,如果不通過PHP

mysql_query("select $column from $table") or mysql_query("alter table $table add $column varchar (20)"); 

但是沒有在數據庫中更改。任何建議爲什麼?

P.S.數據庫已連接。

+1

^如果是這樣的情況下,更有理由要問,爲什麼沒有變化。 – 2013-05-07 11:51:37

+7

愛好/ dev/null ...不要使用PHP mysql遺留api – Terence 2013-05-07 11:51:51

+0

其實不,mysql_query在錯誤時返回false。 – 2013-05-07 11:53:28

回答

7

你可以改變你的SQL來......

//THIS IS BETTER BUT DONT USE THIS 
$qry = "ALTER IGNORE TABLE {$table} ADD {$column} VARCHAR(20);" 

而是使用PHP PDO或MySQLi的預處理語句。 而不是傳統的恐怖與串聯未轉義的字符串。

MySQLi的解決方案:

$mysqli = new mysqli($cfg->host, $cfg->user, $cfg->password, $cfg->db); 

if ($mysqli->connect_errno) { 
    echo 'Connect failed: ', $mysqli->connect_error, '" }'; 
    exit(); 
} 

if ($stmt = $mysqli->prepare("ALTER IGNORE TABLE ? ADD ? VARCHAR(20);")) { 
    $stmt->bind_param("ss", $table, $column); 
    $stmt->execute(); 
    $stmt->close(); 
} 
$mysqli->close(); 
+0

你確定嗎?不'bind_param'使這個查詢像'ALTER IGNORE TABLE'tableName「ADD」fieldName「VARCHAR(20);'? – Narek 2013-05-07 12:20:50

+0

爲什麼要擔心表/字段名的大小寫敏感? – Terence 2013-05-07 12:26:56

+0

不,不,我的意思是引用'ALTER IGNORE TABLE「tableName」AD ...'而不是'ALTER IGNORE TABLE tableName AD ...' – Narek 2013-05-07 12:28:42

2
$r=mysql_num_rows(mysql_query("SHOW columns from '".$table."' where field='".$column."'")); 
if ($r==0){ 
    mysql_query("alter table $table add $column varchar (20)"); 
}