簡體   English   中英

如何將PHP數組中的值插入MySQL表?

[英]How to insert values in a PHP array to a MySQL table?

我正在創建一個注冊表,其中包含姓名,電子郵件和電話號碼字段。 為了檢查用戶輸入的有效性,我有一個函數validate_input()返回包含用戶輸入的輸入的數組$arr (如果用戶輸入有效)。 然后將$arr傳遞給一個單獨的函數,該函數將arr的值插入到MySQL表user中,該user包含nameemailphone字段。

我最初嘗試了以下方法:

$insert_query = "INSERT INTO user (name, email, phone)
                 VALUES ('$arr['name']',
                         '$arr['email']',
                         '$arr['phone']')";
$run_insert_query = mysqli_query($con, $insert_query);

但這沒有用。 一些閱讀顯示,這是將數組值插入數據庫的錯誤方法。 因此,我嘗試了以下操作( 基於此處接受的答案 ):

$escaped_values = array_map('mysql_real_escape_string', array_values($arr));
$arr_values  = implode(",", $escaped_values);

$insert_query = "INSERT INTO user (name, email, phone) VALUES ($arr_values)";
$run_query = mysqli_query($con, $insert_query);

但這也不起作用。 關於如何進行這項工作的任何想法?

在您的insert dml語句中,字符串和格式日期必須用單引號引起來。 由於mysql會嘗試將字符串動態轉換為整數或浮點數,因此您可以嘗試引用所有內容-但即使它能正常工作,這也會在您最不期望的情況下使您難忘。 您的第二個代碼塊還取決於以您期望的順序顯示的數據。 通常,這不太可能改變,但是這是不好的編程。

您不能混合使用mysqli_和mysql_函數。 閱讀php告訴您的錯誤和警告。

假設您的validate_input()函數還對數據調用mysql [i] _real_escape_string()來防止sql注入(也是不良的編程習慣-您應該驗證輸入並轉義輸出),那么您只需要在代碼中修復代碼的語義即可第一個查詢:關聯數組索引已經用“ ....”括起來時,不應該用引號引起來:

$insert_query = "INSERT INTO user 
 (name, email, phone)  
 VALUES ('$arr[name]', '$arr[email]', '$arr[phone]')";
$run_insert_query = mysqli_query($con, $insert_query);

您只是忘記設置正確的報價而已。 這是正確的語法:

$insert_query = "INSERT INTO user (name, email, phone) 
                 VALUES ('".$arr['name']."',
                         '".$arr['email']."', 
                         '".$arr['phone']."')";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM