我正在編寫PHP代碼來更改MySQL數據庫中varchar字段的默認值。爲了使代碼安全,我使用了準備好的語句,但出於某種原因,在這種特殊情況下讓PHP/MySQL接受這一點似乎是不可能的,爲什麼?爲什麼不可以使用預準備語句(基於ALTER TABLE)來設置PHP中MySQL字段的默認值?
(我使用PHP 5.5.11)
這裏是代碼使用預處理語句,不工作(在mysqli_stmt_execute()調用返回null,和字段的默認值保持不變):
$new_field_default_value = 'test';
$field_modification_sql_command = "ALTER TABLE MyTable ALTER COLUMN MyColumn SET DEFAULT ?";
$stmt = mysqli_stmt_init($db_conn_handle);
mysqli_stmt_prepare($stmt, $field_modification_sql_command);
mysqli_stmt_bind_param($stmt, 's', $new_field_default_value);
$temp_db_res = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
下面是使用級聯和純查詢執行的(不安全)代碼,可以使用(mysqli_query()調用返回true,並且該字段的默認值確實被改變):
$new_field_default_value = 'test';
$field_modification_sql_command = "ALTER TABLE MyTable ALTER COLUMN MyColumn SET DEFAULT '" . $new_field_default_value . "'";
$temp_db_res = mysqli_query($db_conn_handle, $field_modification_sql_command);
任何人都可能告訴我,爲什麼在這裏使用準備好的語句無法正常工作,而我需要改變(如果可能的話)以使其與準備好的語句一起工作?
'$ new_field_default_value'的值來自哪裏?那就是說,這個價值是來自一個值得信賴或不可靠的來源? –
它來自一個不可信賴的源碼(一個HTTP參數),上面的代碼只是簡化了這個例子,所以是的,我確實需要一個準備好的語句(無論哪種方式,我仍然感興趣的是爲什麼這些不會在這種情況下工作!)。 – QuestionOverflow
這可能是'mysqli'驅動程序的問題。也許嘗試使用'PDO'?另外,您應該嘗試直接使用[SQL語法](http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html)來準備語句以確保它是可能的在所有。 –