2016-10-20 5 views
-2

У меня есть в базе данных список ссылок, из которых я хочу взять некоторые данные.PHP SIMPLE DOM PDO select

Весь скрипт работает, за исключением части, когда я беру ссылку из БД и вставляю ее в функцию Simple DOM. " включают ('utile/db.php'); include_once ('utile/simple_html_dom.php');

$dbh = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;", $username, $password); 
$sth = $dbh->query("SELECT link FROM pilots where year = '2007' and Contry ='CZ' and zboruri <> '101' limit 3 "); 

foreach ($sth as $url) { 
    functie ($url['link']); 
} 

function functie($lin){ 
    $linkul=file_get_html("$lin"); 

// pages number 
    $paging = $linkul->find('div[class*=paging]',0); 
    echo $paging; 
    $numar=-4; 
    foreach($paging->find('a') as $element=>$item){$numar++;} 
    echo $numar; 
} 

" я получаю следующее сообщение об ошибке:

Fatal error: Call to a member function find() on null in C:\xampp\htdocs\para\teste.php on line 269 

Если я измените ссылку вручную, она будет работать.

Я думаю, что это связано с тем, как я извлекаю ссылку из БД и вставляю ее в функцию.

Спасибо

+0

Возможно, в базе данных есть дополнительные символы. Используйте 'var_dump ($ lin)', чтобы увидеть, что он содержит. Убедитесь, что длина строки соответствует ожидаемой. Там могут быть пробелы или новые строки. – Barmar

+1

Вы не должны вставлять вызов 'include_once' внутри функции. Эти функции должны определяться глобально, а не локально для функции. – Barmar

+0

спасибо @Barmar. Но я все равно получаю ту же ошибку. – Tudor

ответ

-1

Когда я использую PDO Я использую подготовленные заявления, поэтому синтаксис на получение результата запроса немного отличается ... но я думаю, что вам нужно получить строку из вашего $ STH поскольку это будет набор записей. Вот фрагмент того, что я делаю

$dbconn = new PDO('mysql:host='.$hostname.';port='.$dbPort.';dbname='.$dbName.';charset=utf8', $dbuser, $dbpass,array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); 
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $result=$dbconn->prepare($query); 
    $result->execute($arr); 
    if(!$result){ 
     // do your error handling, result is either false 
     // for error or contains a recordset 

     $errorMessage=$dbconn->errorInfo(); 

    } 

    $result->setFetchMode(PDO::FETCH_ASSOC); 
    while($row=$result->fetch()){ 

    // do stuff here, $row is an associative array w/ the 
    //keys being the column titles in your db table 

     print_r($row); 

    } 
+0

Спасибо @ivanivan. Но, – Tudor

+0

Я все еще получаю ту же ошибку. – Tudor

+0

В основном, у меня есть список URL-адресов для каждого, мне нужно запустить простой сценарий DOM, сохраненный в базе данных. – Tudor

0

Проблема с fetchALL в foreach. линия изменилась:

foreach($sth->fetchAll() as $url){

Окончательный код, который работает:

include ('utile/db.php'); 
include_once('utile/simple_html_dom.php'); 

$dbh = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;", $username, $password); 
$sth = $dbh->query("SELECT link FROM pilots where zboruri > '101' limit 3"); 

foreach($sth->fetchAll() as $url){ 
    functie ($url['link']); 
} 

function functie($lin){ 
    var_dump($lin); 
    $linkul=file_get_html("$lin"); 

    $paging = $linkul->find('div[class*=paging]',0);// pages number 
    echo $paging; 
    $numar=-4; 
    foreach($paging->find('a') as $element=>$item){$numar++;} 
    echo $numar; 
} 

Спасибо за советы.