2011-12-19 159 views
0

我更改了代碼,以便可以直接插入數據庫。現在我遇到了一行代碼$database->bindParam(':name', $name[0][$i]);的問題。這給了我錯誤Fatal error: Call to undefined method PDO::bindParam()我該如何解決這個問題?使用預處理語句將數據插入數據庫pdo

$hostname = 'XXX'; 
$database = 'XXX'; 
$username = 'XXX'; 
$password = 'XXX'; 
$database = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 

function get_data($url) 
{ 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$html = get_data($_GET['url']); 
preg_match_all('/\<font face\=\"Arial\"\>\<strong\>(.*)\<br\>\<font color/', $html, $name); 
preg_match('/\<strong\>([A-Z\s0-9]+) BIRTHDAYS\<\/strong\>/', $html, $date); 

for ($i=0, $n=count($name[1]); $i<$n; ++$i) {  
     try { 
      $insert = $database->prepare("INSERT INTO bday (name, birthdate) VALUES (:name, :date)"); 

      $database->bindParam(':name', $name[0][$i]); 
      $database->bindParam(':date', $date[1]); 

      $insert->execute(); 
     } 

     catch (PDOException $e) { 
      echo $e->getMessage(); 
     } 
} 
+2

有自動遞增的主鍵簡單的插入,該數據庫將採取其他 – 2011-12-19 03:31:23

回答

1

首先獲取內容:

$content = file_get_contents('filename'); 

獲取每一行:

$line = explode('\n', $contents); 

現在你有一個數組的每一行;遍歷每個再次爆發,上逗號,並插入到DB

$ct = count($arr); 
while($i < $ct) 
{ 
    $arr = explode(',', $line[$i]); 
    /* Insert into database value $i, $arr[1], $arr[2], just ignore $arr[0] which contains your original string */ 
    $i++; 
} 
+0

照顧的數據實際上是不是在數據庫中的文本文件,但 – bammab 2011-12-19 03:29:02

+0

@bammab查看編輯。 – check123 2011-12-19 03:33:23

+0

謝謝我改變了代碼直接添加到數據庫,你現在可以看看它嗎? – bammab 2011-12-19 04:06:52

1

我想使數據庫具有自動遞增,所以你不必擔心它的主鍵,但如果這是不可能的只是扔在一個for循環:

$array = explode("\n",file_get_contents("file.txt")); 
foreach($array as $count => $line) { 
    $array[$count] = str_replace('xxx',$count+1,$line); 
} 
+0

我做了改變,你現在可以看看。謝謝 – bammab 2011-12-19 04:07:14