2014-06-20 22 views
0

您好我想插入一些數據從一個解析的JSON到一個表,但是當我這樣做,它不工作,它返回0行,我失蹤了什麼?我是新的,但這個「mysqli」..我有超過25000行插入到表中。 THX從數組中插入mysql與mysqli

$mysqli = mysqli_connect('localhost', 'root', '', ''); 

$allData = $dataSource->getAllData(); 
foreach ($allData as $key => $value) { 
    $query = 'INSERT INTO `table`(`data_id`, `name`) VALUES (' . $value['data_id'] . ', ' . $value['name'] . ')'; 
    $result = mysqli_query($mysqli, $query); 
} 

現在的工作,它完全插入對象的數據,我提出THX到回覆代碼是這樣的:

$mysqli = mysqli_connect('localhost', 'root', '', '') or die(mysqli_connect_error()); 
if (!$mysqli) { 
    die('Could not connect: ' . mysqli_error()); 
} 

$ ALLDATA = $ dataSource-> getAllData ();

foreach ($allData as $key => $value) { 
    $query = mysqli_prepare($mysqli, "INSERT INTO `table`(`data_id`, `name`) VALUES (?, ?)"); 
    mysqli_stmt_bind_param($query, 'is', $value['data_id'], $value['name']); 
    mysqli_stmt_execute($query); 
    mysqli_stmt_close($query); 
} 

希望一切都確定在這裏,我在這個新的mysqli的,我需要用編程大量的實踐

+0

什麼返回零行?我沒有看到任何代碼在這裏。還有一個更有效的方法來做到這一點。 –

+0

我使用phpmyadmin,當我想打開表時,它返回0行,我沒有在代碼中得到,我會做到這一點後,我可以解決這個問題:D – matuuz

+0

在這種情況下,您的查詢失敗。使用'musqli_error()'來看看爲什麼 –

回答

1

好像你應該設定在你的數據值的單引號。還加入了mysqli_error檢查您mysqli_query行,以便你可以看到發生了什麼:

$allData = $dataSource->getAllData(); 
foreach ($allData as $key => $value) { 
    $query = "INSERT INTO `table`(`data_id`, `name`) VALUES ('" . $value['data_id'] . "', '" . $value['name'] . "')"; 
    $result = mysqli_query($mysqli, $query) or die(mysqli_error()); 
} 

或者更好的是,使用mysqli_stmt_bind_param這樣。允許MySQLi處理整個查詢數據結構,而不必擔心單引號放置。此外,增加了mysqli_connect_error檢查您mysqli_connect行:

// Connecting, selecting database 
$mysqli = mysqli_connect('localhost', 'root', '', '') or die(mysqli_connect_error()); 

$allData = $dataSource->getAllData(); 
foreach ($allData as $key => $value) { 
    // Set the query. 
    $query = "INSERT INTO `table`(`data_id`, `name`) VALUES (?, ?)"; 

    // Bind the params. 
    // mysqli_stmt_bind_param($query, 'ss', $value['data_id'], $value['name']); 
    mysqli_stmt_bind_param($query, 'is', $value['data_id'], $value['name']); 

    // Run the query. 
    $result = mysqli_query($mysqli, $query) or die(mysqli_error()); 
} 

請注意,我對mysqli_stmt_bind_param一個註釋行,因爲它給我不清楚,如果你$value['data_id']是一個數字或一個字符串。 mysqli_stmt_bind_param($query, 'is',…表示第一個值是整數(i),下一個值是字符串(s)。隨意調整以最適合您的實際數據類型。

+0

謝謝,這幫了我:D – matuuz

+0

thx很多,我昨天開始用這個頁面,這真的很有幫助:D – matuuz

-1

一個更自動化的解決辦法是:

$link = mysqli_connect('localhost', 'root', 'password', 'mydatabase') or die(mysqli_connect_error()); 

foreach ($groups as $key => $values) { 
    $valuesArray = array(); 
    // figure out if we have to encapsulate in '' 
    foreach($values as $key => $value){ 
     switch(gettype($value)){ 
      case 'boolean': 
      case 'integer': 
      case 'double': // includes float 
       $valuesArray[] = $value; 
      break; 
      case 'string': 
       $valuesArray[] = '\''.$value.'\''; 
      break; 
      default: 
       die('not possible'); 
      break; 
     } 
    } 
    $query = 'INSERT INTO mydatabase.mytable(' . implode(',',array_keys($values)) . ') VALUES (' . implode(',',$valuesArray) . ')'; 
    // echo $query; // debug 
    $result = mysqli_query($link, $query) or die(mysqli_error()); 
} 

該解決方案是平原的mysqli再次,外部輸入使用預處理語句或PDO或之類的!

+0

有點危險,根本沒有SQL注入緩解! – Nick

+0

@尼克這就是爲什麼我投票準備好的陳述。只是想提供一個起點。沒有生產就緒的原因! – Hafenkranich