2013-05-07 42 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)"); 
}