2014-03-25 16 views
0

我必須在JavaScript數據庫中插入一些數據。用於發送數據到php script我使用jQuery框架的AJAX,$.POST和PHP的mysqli函數在數據庫中插入數據。正確的方法Javascript PHP MySQL

的javascript:

$.POST("insertData.php", { 
    name1: val1, 
    name2: val2, 
    ... 
}, function(data){ 
    console.log(data); 
}); 

php腳本:

<?php 
    $val1 = $_POST['name1']; 
    $val2 = $_POST['name2']; 
    ... 

    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

    $stmt = $mysqli->prepare('INSERT INTO tableName (name1, name2, ...) VALUES (?,?,...)'); 
    $stmt->bind_param('ss...', $val1 , $val2 , ...); 

    $stmt->execute(); 

    $stmt->close(); 
    $mysqli->close(); 
?> 

但是用這種方法,我必須寫列名樹次,第一次在JavaScript中使用AJAX發送數據,第二在PHP中從$_POST回收數據,最後再次在PHP中進行查詢。

有沒有什麼適當的方法從Javascript中插入數據到MySQL數據庫中,你不應該多寫幾次列名?

回答

0

「從POST中檢索數據」毫無意義。只要使用$_POST['name1']無論你需要它的代碼,而不是將其分配給$val1 - 你實際上是不必要的重複數據這樣浪費內存;)

+0

他問起列名 –

+0

@ferozakbar Yeeeees,我提到這些名字的重複之一是如何毫無意義的。 –

+0

但您正在討論的不是列的值 –

0

對於什麼是值得的,雖然我不知道爲什麼會你想,你可以做這樣的事情:

<? 
    $columns = array_keys($_POST); //$columns is now array with column names 
    foreach ($columns as $columns) echo $_POST[$column]; //get value for each column 
    $columns = join(",",array_keys($_POST)); //$columns is now string name1,name2,... 

    $values = array_values($_POST); //$values is now array with values 
    $values = "'".join("','",array_values($_POST))."'"; //$values is now string 'value1','value2','value3',... 

?> 

這是在PHP和只是基本的數組操作,我不建議使用此生成的查詢。因爲你永遠無法確定你在$_POST$_POST中獲得的數據,你的例子中的JavaScript數據可以由最終用戶操縱。

但是,我張貼這只是爲了顯示一些關於你的問題的基本技巧。

0

雖然這是一種不好的做法,但您不必在查詢中指定列名稱。如果您的文章是1-1匹配列,你可以這樣做:

$input = rtrim(str_repeat('?,', count($_POST)), ','); 
    $stmt = $mysqli->prepare("INSERT INTO tableName VALUES ($input)"); 
    array_shift($_POST, 'ss...'); 
    call_user_func_array(array($stmt, 'bind_param'), $_POST); 
0

您可以創建白名單中列名,你將允許在PHP端插入之前設定的數組。由此明確指出哪些列是可更新/可插入的。現在你有一個可信的密鑰列表。

現在,您可以迭代白名單數組,以動態構建您的SQL INSERT語句或迭代POST數組,併爲您的白名單中的每個鍵從那裏構建一條SQL語句。你可以建立其映射到不同的表,如果運氣好的話,你可以使用相同的後端邏輯多個表

0

你可以嘗試這樣的財產以後不同的行動不同的白名單:

<?php 
    $myvars = array ("name1"="","name2"="") 
    foreach ($myvars as $key => &$vlaue) 
    { 
     if (isset $_POST[$key]) 
     { 
      $value = $_POST['$key']; 
     } 
    } 

    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

    $stmt = $mysqli->prepare('INSERT INTO tableName ('.implode(", ",array_keys(myvars).')) VALUES '.trim(",",str_repeat("?, ", count($myvars)).')'); 
    $stmt->bind_param('ss...', $val1 , $val2 , ...); 

    $stmt->execute(); 

    $stmt->close(); 
    $mysqli->close(); 
?>