我正在尝试运行以下查询,但是我得到一个sql语法错误,但Dreamweaver似乎没有突出显示任何错误,所以我不知道它在哪里? 谢谢: - )
<?php
$form_id = $_POST[form_id];
$query = mysql_query("
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'email_history'
AND COLUMN_NAME = `$form_id`)
BEGIN
ALTER TABLE 'email_history' ADD `$form_id` VARCHAR( 255 ) NOT NULL
END;
") or die(mysql_error());
?>
答案 0 :(得分:1)
看看
‘$form_id`
你可能意味着
`$form_id`
更新:再次出现错误报价
'email_history'
应该是
`email_history`
提醒:反引号`用于限定符(表名等),其中撇号'
用于值。
答案 1 :(得分:1)
这是正确的报价格式。
$query = mysql_query("
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'email_history'
AND COLUMN_NAME = '$form_id')
BEGIN
ALTER TABLE `email_history` ADD `$form_id` VARCHAR( 255 ) NOT NULL
END;
") or die(mysql_error());
答案 2 :(得分:0)
试试这个。
$form_id = $_POST[form_id];
$query = mysql_query("
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'email_history'
AND COLUMN_NAME = '$form_id')
BEGIN
ALTER TABLE `email_history` ADD `$form_id` VARCHAR( 255 ) NOT NULL
END;
") or die(mysql_error());
另外,请注意,您不应该直接将用户输入中的值用于SQL。这是为了防止SQL注入。以下是MySQL注入的一些链接,我发现:
http://www.php.net/manual/en/security.database.sql-injection.php http://25yearsofprogramming.com/blog/2011/20110205.htm https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
答案 3 :(得分:0)
<?php
$form_id = $_POST[form_id];
$query = mysql_query("
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'email_history'
AND COLUMN_NAME = '$form_id')
BEGIN
ALTER TABLE email_history ADD `$form_id` VARCHAR( 255 ) NOT NULL
END;
") or die(mysql_error());
?>
答案 4 :(得分:0)
每个人都专注于糟糕的引用,但这个查询是否有可能运行? MySQL是否允许这样的条件语句?我知道这在存储例程中是可能的,但我从未听说过这样的直接用法,所以我将它分成两个查询:列存在检查和表格更改。
这将是这样的:
<?php
$form_id = some_function_to_check_if_input_is_valid_etc($_POST[form_id]);
$exist_result = mysql_query("SELECT IF(NOT EXISTS(
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'email_history'
AND COLUMN_NAME = '{$form_id}'
),1,0) AS should_alter_table
");
$row = mysql_fetch_assoc($exist_result);
if($row['should_alter_table']){
mysql_query("ALTER TABLE email_history ADD `{$form_id}` VARCHAR( 255 ) NOT NULL");
}