2013-12-09 126 views
0

我正在學習php/sql/wamp,並在學習項目上遇到了很多麻煩...創建一個數據庫插入從PHP中的數據?

我有一個txt文件下面ive終於想通了加載到PHP,但我不知道如何處理創建將數據插入並執行查詢所需的數據庫sql ...是否有良好的鏈接或教程或示例代碼?下面是我的PHP和txt代碼

<?php 

error_reporting(E_ERROR); 
$header = '<?xml version="1.0" encoding="UTF-8"?>'."\n<datalist>"; 
$content = $header."\n".file_get_contents("data.txt")."\n</datalist>"; 
$ob = simplexml_load_string($content); 
$json = json_encode($ob); 
$array = json_decode($json, true); 
$alldata = $array["pub"]; 

foreach ($alldata as $key => $value) { //access all data in loop 
$id = $value["ID"]; 
$title = $value["title"]; 
$year = $value["year"]; 
$booktitle = $value["booktitle"]; 
$pages = $value["pages"]; 
$authors = implode(",", $value["authors"]["author"]); 
//All process data can available here .run your sql query for insert. 
} 

?> 

和我下面的txt文件..相同的格式,但對於數據的50MB

<pub> 
<ID>0</ID> 
<title>Regression Time Warping for Similarity Measure of Sequence</title> 
<year>2004</year> 
<booktitle>CIT</booktitle> 
<pages>826-830</pages> 
<authors> 
     <author>Hansheng Lei</author> 
     <author>Venu Govindaraju</author> 
</authors> 
</pub> 
<pub> 
<ID>1</ID> 
<title>A Computational Model for Face Location Based on Cognitive Principles</title> 
<year>1992</year> 
<booktitle>AAAI</booktitle> 
<pages>350-355</pages> 
<authors> 
     <author>Venu Govindaraju</author> 
     <author>Sargur N. Srihari</author> 
     <author>David B. Sher</author> 
</authors> 
</pub> 
+1

$ ob = simplexml_load_string($ content); $ json = json_encode($ ob); $ array = json_decode($ json,true); 你爲什麼要加載到一個對象,然後json編碼它,然後解碼成一個數組?我是否錯過了爲什麼不從一開始就使用這個對象的原因? – skrilled

+0

你建議$ array = $ ob? –

+0

可能有成千上萬的關於MySQL的教程,以及如何在PHP中與這個在SO和交易過的Google員工中進行交互。 –

回答

2

在MySQL創建表。然後使用mysqli(或PDO)插入數據。

/** 
* Connect to database 
*/ 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world'); 

/** 
* Loop data 
*/ 
foreach ($alldata as $key => $value) { //access all data in loop 
    /** 
    * Insert row. This assumes that your table columns are in the 
    * same order as the variables as they are given below 
    */ 
    $authors = implode(",", $value["authors"]["author"]); 
    $stmt = $mysqli->prepare("INSERT INTO your_table VALUES (?, ?, ?, ?, ?, ?)"); 
    $stmt->bind_param('ssssss', 
         $value["ID"], 
         $value["title"], 
         $value["year"], 
         $value["booktitle"], 
         $value["pages"], implode(",", $value["authors"]["author"])); 
    $stmt->execute(); 
} 

http://us1.php.net/manual/en/mysqli-stmt.bind-param.php

請注意,可以使用MySQL插入多個記錄。 (Inserting multiple rows in mysql。)你可以這樣做來減少插入的數量,但是它使查詢更加複雜。

另請注意,對此數據使用單個表格並不是最佳選擇。理想情況下,你會使用三個表:

  • 書籍=所有書籍
  • 作者=所有作者
  • Author_book =一本書,它的許多作家

之間的關係想想解決以下問題使用單個表格:

  • 當您的其中一個<作者>條目包含逗號?您的代碼使用逗號爆作者列表,從而... <作者> <作者>韋納·戈文達拉傑< /作者> <作者> Sargur N.斯里裏< /作者> <作者>大衛B.舍爾博士< /作者> < /作者> ...成爲Venu Govindaraju,Sargur N. Srihari,David B. Sher,博士。
  • 您會如何查找作者A和作者B撰寫的所有書籍?您必須創建一些過於複雜的關鍵字搜索數據庫中作者列的方法。
+0

非常深刻的謝謝你,我正在努力工作......我應該不使用wamp? –

+0

你怎麼沒有提到data.txt文件呢?我不明白它如何加載,如果它不知道什麼文件加載? –

-1

您的循環中,您需要連接到數據庫,然後裏面你之前for循環,您需要插入您從數據文件中讀取的每一行。你的表結構是什麼樣的?你有沒有試圖自己寫SQL?

連接到數據庫:http://jadendreamer.wordpress.com/2011/01/25/connecting-to-a-mysql-database-using-php/

插入到數據庫:http://www.w3schools.com/sql/sql_insert.asp

+0

Downvoted for old article。請建議一些不被棄用的東西(mysql_ *):p – skrilled

+0

我應該不使用wamp嗎? –