Проблема с выборкой из Mysql с помощью PDO

Dali

Постоялец
Регистрация
7 Апр 2006
Сообщения
155
Реакции
156
Проблема с выборкой с помощью PDO

Собственно бьюсь уже второй день мозг кипит... уже замучал гуглу, а проблему так и не решил попытаю счастье у нс на форуме. Собственно есть такой вот скрипт:
PHP:
try{
    $bdh = new PDO ("mysql:host=$hostname;dbname=$basename", $username, $password);
    echo "Соединение установлено<hr></br>";
    while(!feof($list)){
        $url=trim(fgets($list));        
        $content = file_get_contents($url);  
        preg_match_all("#<li>(.*)</li>#iU",$content,$elements);
        $llist = $elements[1];
        if ($llist){
            $first_l = array_shift($llist);
            $ins = "('".$url."', '".$first_l."')";
            echo $ins."<hr><br>";
            $insert = $bdh->exec("INSERT INTO con_url (dom, url_page) VALUES ".$ins);
            echo "добавленно: ".$insert."<hr><br>";
            
            $sql = "SELECT * FROM con_url";
            foreach ($dbh->query($sql) as $row) {
                echo $row['id']. '-' .$row['dom']. '-' .$row['url_page'].'<hr />';
            }
            */
            print_r($urllist);
        }
    }
    $bdh =null;
} catch( PDOExecption $e ) {
    print "Error!: " . $e->getMessage() . "</br>";
}
Суть скрипта в том что по урлу из файла грузим документ забираем список данных(получаем массив данных) если это массив не пустой то из него выбираем первый элемент и заносим в таблицу con_url вида:"id / dom / url_page", далее надо потянуть эту строку из мускула чеб получить id строки для записи уже всех остальных элементов массива в другую таблицу con_dom вида "id / m_id(тоесть наш id из таблицы con_url) / url_page".

И все бы хорошо должно было быть если бы не одно но! после того как я заинсетил первое значение в таблицу я его немогу вытянуть эту строку чеб взять ид для дальнейших извращений пишет вот это:
Код:
Notice:  Undefined variable: dbh in Z:\home\test1.ru\www\ant.php on line 39
Fatal error:  Call to a member function query() on a non-object in Z:\home\test1.ru\www\ant.php on line 39
А суть вопрос как поправить мой горе скриптиг чеб он работал...

P/S/ за код если что извиняюсь из меня наверное пхп программер как из .... пуля , есть подозрение что может надо типа закрывать соединение после того как проинсертил тока в мануле по этому сраному PDO не фига об этом не сказанно
 
Читай внимательно ошибки:
Notice: Undefined variable: dbh in Z:\home\test1.ru\www\ant.php on line 39
Fatal error: Call to a member function query() on a non-object in Z:\home\test1.ru\www\ant.php on line 39

$bdh = new PDO ("mysql:host=$hostname;dbname=$basename", $username, $password);
....
foreach ($dbh->query($sql) as $row)
 
Читай внимательно ошибки:
Notice: Undefined variable: dbh in Z:\home\test1.ru\www\ant.php on line 39
Fatal error: Call to a member function query() on a non-object in Z:\home\test1.ru\www\ant.php on line 39

$bdh = new PDO ("mysql:host=$hostname;dbname=$basename", $username, $password);
....
foreach ($dbh->query($sql) as $row)

Я конечно извиняюсь, но такое я уже читал (гуглом пользоваться умею) и если бы мне оно помогла я бы сюда не писал, можно как школьнику ) в пхп, объяснить а лучше написать как правильно строить конструкцию инсерта и выборки конкретно в этом случае.... неужели сложно написать как это должно выглядеть правильно, причем я разделом не ошибся тоже вроде....
причем если вывести var_dump($bdh); перед foreach выводит object(PDO)#1 (0) тоесть на сколько я понимаю $bdh = объект pdo так чего оно пишет что query() не объект... Ладно буду благодарен если покажете рабочую конструкцию "инсерт селект" в одном скрипте
 
Я тоже так однажды ступил :)

$bdh и
$dbh

вы буквы перепутали.
 
  • Нравится
Реакции: Dali
забавная опечатка

инсерт вообще нужно делать как-то так
PHP:
$dom = "value3";
$url_page = "value4"; 
 
$q = $bdh->prepare("INSERT INTO con_url (dom, url_page) VALUES (:dom,:url_page)");
$q->execute(array(':dom'=>$dom, ':url_page'=>$url_page));
без всяких извращенных конкатенаций строк для составления запроса

ну и чтоб достать айди последней вставленной записи достаточно непосредственно после инсерта вызвать метод lastInsertId, а не делать SELECT * и искать там последнюю запись

PHP:
$lastInsertId =  $bdh->lastInsertId();

Добавлено через 3 минуты
ну и в селекте наверн лучше как-то так

PHP:
foreach ($bdh->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row) {
}
т.е. задать явно что выбираем записи в ассоциативном массиве ....
иначе будет возвращен и ассоциативный массив и числовой ( спаренные ) .. - мелочь но прост лишний расход памяти на ненужные данные
 
  • Нравится
Реакции: Dali
Я конечно извиняюсь, но такое я уже читал (гуглом пользоваться умею) и если бы мне оно помогла я бы сюда не писал, можно как школьнику ) в пхп, объяснить а лучше написать как правильно строить конструкцию инсерта и выборки конкретно в этом случае.... неужели сложно написать как это должно выглядеть правильно, причем я разделом не ошибся тоже вроде....
причем если вывести var_dump($bdh); перед foreach выводит object(PDO)#1 (0) тоесть на сколько я понимаю $bdh = объект pdo так чего оно пишет что query() не объект... Ладно буду благодарен если покажете рабочую конструкцию "инсерт селект" в одном скрипте
Ни кто не спорит, гооглом все умеют пользоваться :)
причем если вывести var_dump($bdh); перед foreach выводит object(PDO)#1 (0)
да, всё верно, но посмотри что у тебя в самом foreach() написано: $dbh, а не $bdh
 
  • Нравится
Реакции: Dali
Назад
Сверху