2015-11-07 63 views
-1

嗨朋友對不起我的英語。我有問題,我怎麼能保存鏈接到MySQL?我是編程php的新手。感謝所有答案。保存在從foreach的mysql

<?php 

set_time_limit(0); 
$db = new mysqli('localhost', 'root', 'pass'); 
$db -> query("SET CHARSET utf8"); 
$db -> query("SET NAMES 'UTF-8' COLLATE 'utf8_polish_ci'"); 

$html = file_get_contents("http://www.somesite.com"); 
$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div){ 
    if(preg_match('/\bimgw\b/', $div->getAttribute('class'))) { 
     $links = $div->getElementsByTagName('a'); 
     foreach($links as $link){ 
       $li = $link->getAttribute('href'); 
       $zapytanie = "SELECT * FROM `dane` WHERE link='".$li."';"; 
       $wynik = $db->query($zapytanie); 
       $baza = mysql_fetch_assoc($wynik) ; 
       if ($baza['link'] == $li) 
     print ("OK Exist ".$baza['ID'].'<br>'); 
       else 

       echo ("<br>Not exist ".$baza['ID']); 

     } 
    } 
} 

?> 
+0

所以,當你想插入當你拿到*'不Exist' *消息 – Mubin

+2

你的問題是 –

+0

混合MySQL的?用mysqli不會起作用 – jeroen

回答

0

1) 你不選擇database在連接到host,連接字符串將

​​

2)你混合mysqlmysqli,它只是贏得了」 t在任何情況下工作, 所以,這條線$baza = mysql_fetch_assoc($wynik) ;將變成$baza = mysqli_fetch_assoc($wynik) ;

3)你不能在else做到這一點echo ("<br>Not exist ".$baza['ID']);,如果它不從database發現什麼這個代碼將只運行,所以你不必指數$baza['ID'],所以,當你對代碼打else條件,然後做這個(此代碼替換您的else

else{ 
    $stmt = $db->prepare("INSERT INTO `dane`(`link`) VALUES(?)"); 
    $stmt->bind_param("s", $li); 
    $stmt->execute(); 
} 

,並在foreach結束(外循環)

$stmt->close(); 
$db->close(); 
0

THX的答案。 ..我現在明白我做錯了什麼。我把代碼回顯和打印,因爲我想看看什麼是壞的,但這是錯誤的方式。 看了你的帖子,並用你的建議,但是沒有工作;(

<?php 

set_time_limit(0); 
$db = new mysqli('localhost', 'root', 'pass', 'test'); 
$db -> query("SET CHARSET utf8"); 
$db -> query("SET NAMES 'UTF-8' COLLATE 'utf8_polish_ci'"); 

$html = file_get_contents("http://somesite.com"); 
$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div){ 
    if(preg_match('/\bimgw\b/', $div->getAttribute('class'))) { 
     $links = $div->getElementsByTagName('a'); 
     foreach($links as $link){ 
       $li = $link->getAttribute('href'); 
       $zapytanie = "SELECT * FROM `dane` WHERE link='".$li."';"; 
       $wynik = $db->query($zapytanie); 
       $baza = mysqli_fetch_assoc($wynik) ; 
       if ($baza['link'] == $li) 
     print ('OK Exist <br>'); 
       else 
       { 
       $stmt = $db->prepare("INSERT INTO `test`.`dane` (`link`) VALUES (?);"); 
       $stmt->bind_param("s", $li); 
       $stmt->execute(); 
       } 

      $stmt->close(); 
      $db->close(); 
     } 
    } 
} 







?> 
+0

把'error_reporting(E_ALL);'放在最上面,檢查一下顯示的是什麼錯誤,另外,試着'echo $ li;'來查看你到底在那裏。 – Mubin

+0

Thx friend I應該把$ stmt放到我的if else子句中並且工作;) –

+0

'$ stmt-> close(); $ db-> close();'把這兩行放在下一個右括號'}'的外面 – Mubin