Написал парсер сортировкой осталось только пути в таблицу href вставить. Пути вставляются но все остальные колонки становится типом NULL. Что делать подскажите комрады! PHP: <?php $host = '127.0.0.1'; $db = 'gigal'; $user = 'root'; $pass = ''; $charset = 'utf8'; $objectId = ''; $image = ''; $row = ''; $id = ''; $number_catalog = 1; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // Инициализируем переменные к подключению $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); // Подключаемся через PDO $stmt = $pdo->query('SELECT * FROM id_images'); // Выбираем каждый блок в таблице id_images while ($row = $stmt->fetch(PDO::FETCH_LAZY)) // Проходимся циклом и переносим даннные по папкам { $row_object = $row['objectId']; $row_image = $row['image']; $id_image = $row['id']; $type_image = $row['ext']; $count_dir = count(glob("../uploads/image/{$number_catalog}/*")); if($count_dir < 100) { $strukture = "../uploads/image/{$number_catalog}/"; $path = $strukture.$row_object; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); //$href_old = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $pdo->exec("INSERT INTO id_images (href) VALUES ('../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}')"); /*способ 2 $stmt = $pdo->prepare('INSERT INTO id_images (href) VALUES (:href_old)'); $stmt->execute(array(':href_old' => $href_old));*/ } else { $number_catalog++; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); //$href_new = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $pdo->exec("INSERT INTO id_images (href) VALUES ('../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}')"); /*способ 2 $stmt = $pdo->prepare('INSERT INTO id_images (href) VALUES (:href_new)'); $stmt->execute(array(':href_new' => $href_new));*/ } } ?>
какие другие колонки то? в таблице id_images? Если это новые строки - то нужно задавать все необходимые поля, если эти строки существовали и вы в них добавлять хотите данные по картинкам - то вам update нужно делать с условием в том виде что есть - это вообще бред - просто в таблицу вставляются пути картинок .. .никак ни с чем не связанные. Что с ними делать потом - непонятно
Да все остальные колонки Nulled становятся но путь к картинке в таблице href прописывается. В остальные строки добавлять ничего не надо там все уже прописано, моя задача в колонку href прописать путь к картинке причем не к 1 картинке их там 60 000 но когда вставляю путь то все колонки порятся и становятся типом NULL Как этого избежать? Погуглил оказца в exec нельзя переменные так вставлять только через функцию quote но теперь пишет ситаксическая ошибка. Тут идет выборка селектом в цикле и тут же когда он выбирает и сохраняет картинки в папку моя задача выдрать путь и вставить инсертом в колонку href. PHP: <?php $host = '127.0.0.1'; $db = 'gigal'; $user = 'root'; $pass = ''; $charset = 'utf8'; $objectId = ''; $image = ''; $row = ''; $id = ''; $number_catalog = 1; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // Инициализируем переменные к подключению $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); // Подключаемся через PDO $stmt = $pdo->query('SELECT * FROM id_images'); // Выбираем каждый блок в таблице id_images while ($row = $stmt->fetch(PDO::FETCH_LAZY)) // Проходимся циклом и переносим даннные по папкам { $row_object = $row['objectId']; $row_image = $row['image']; $id_image = $row['id']; $type_image = $row['ext']; $count_dir = count(glob("../uploads/image/{$number_catalog}/*")); if($count_dir < 100) { $strukture = "../uploads/image/{$number_catalog}/"; $path = $strukture.$row_object; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); //$href_old = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $pdo->exec("INSERT INTO id_images (href) VALUES ('../uploads/image/'.$pdo->quote($number_catalog).'/'.$pdo->quote($row_object).'/'.$pdo->quote($row_image).'.'.$pdo->quote($type_image).'')"); /*способ 2 $stmt = $pdo->prepare('INSERT INTO id_images (href) VALUES (:href_old)'); $stmt->execute(array(':href_old' => $href_old));*/ } else { $number_catalog++; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); //$href_new = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $pdo->exec("INSERT INTO id_images (href) VALUES ('../uploads/image/'.$pdo->quote($number_catalog).'/'.$pdo->quote($row_object).'/'.$pdo->quote($row_image).'.'.$pdo->quote($type_image).'')"); /*способ 2 $stmt = $pdo->prepare('INSERT INTO id_images (href) VALUES (:href_new)'); $stmt->execute(array(':href_new' => $href_new));*/ } } ?>
ответы невнимательно читаете ... вам нужно UPDATE понимаете? обновлять данные с столбце определенном - а не INSERT - ДОБАВЛЯТЬ новые
Понятно, но ведь href колонка пустая там нет ничего разве не вставлять туда путь к картинке? В общем попробую так как вы говорите попытка не пытка и так массу вариантов перепробовал. Спасибо!
какие попытки.. о чем вы? это ж базовое понимание на человеческом уровне! Например если вам в экселе надо в заполненной таблице в какой то столбец внести ИЗМЕНЕНИЯ - вы что строчку всегда добавляете? или идете в существующую строчу и в нужном столбце пишете изменения?
Попробовал через update но цикл while не работает теперь 1 идет вызов на update и все. Моя задача сделать выборку и в конце засунуть путь в href. PHP: <?php $host = '127.0.0.1'; $db = 'gigal'; $user = 'root'; $pass = ''; $charset = 'utf8'; $objectId = ''; $image = ''; $row = ''; $id = ''; $number_catalog = 1; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // Инициализируем переменные к подключению $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); // Подключаемся через PDO $stmt = $pdo->query('SELECT * FROM id_images'); // Выбираем каждый блок в таблице id_images while ($row = $stmt->fetch(PDO::FETCH_LAZY)) // Проходимся циклом и переносим даннные по папкам { $row_object = $row['objectId']; $row_image = $row['image']; $id_image = $row['id']; $type_image = $row['ext']; $count_dir = count(glob("../uploads/image/{$number_catalog}/*")); if($count_dir < 100) { $strukture = "../uploads/image/{$number_catalog}/"; $path = $strukture.$row_object; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_old = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $sql = "UPDATE id_images SET href = :href_old WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_old'=>$href_old, ':id'=>$id)); } else { $number_catalog++; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_new = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $sql = "UPDATE id_images SET href = :href_new WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_new'=>$href_new, ':id'=>$id)); } } ?>
по текущему коду - я конечно не вчитываюсь, но думаю что $id у тебя нигде не задано - потому ничего и не обновится
Вот что пишет консоль php: Warning: mkdir(): File exists in D:\OpenServer\domains\localhost\parser\index.php on line 40 Call Stack: 0.0000 137136 1. {main}() D:\OpenServer\domains\localhost\parser\index.php:0 0.0770 273264 2. mkdir() D:\OpenServer\domains\localhost\parser\index.php:40 2 вызова проходит и все до этого было по 10000 вызовов проходило в зависимости от строк в таблице id_images PHP: <?php $host = '127.0.0.1'; $db = 'gigal'; $user = 'root'; $pass = ''; $charset = 'utf8'; $objectId = ''; $image = ''; $row = ''; $id = ''; $number_catalog = 1; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // Инициализируем переменные к подключению $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); // Подключаемся через PDO $stmt = $pdo->query('SELECT * FROM id_images'); // Выбираем каждый блок в таблице id_images while ($row = $stmt->fetch(PDO::FETCH_LAZY)) // Проходимся циклом и переносим даннные по папкам { $row_object = $row['objectId']; $id = $row['id']; $row_image = $row['image']; $id_image = $row['id']; $type_image = $row['ext']; $count_dir = count(glob("../uploads/image/{$number_catalog}/*")); if($count_dir < 100) { $strukture = "../uploads/image/{$number_catalog}/"; $path = $strukture.$row_object; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_old = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $sql = "UPDATE id_images SET href = :href_old WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_old'=>$href_old, ':id'=>$id)); } else { $number_catalog++; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_new = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; $sql = "UPDATE id_images SET href = :href_new WHERE id = :id"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_new'=>$href_new, ':id'=>$id)); } } ?> Думаю что функция Prepare() и Execute() останавливет цикл с селектом. --- Добавлено --- ../uploads/image/{$number_catalog}/{$row_object}/ В таком виде путь залетает в колонку href. Почему то он не берет значения с переменных $number_catalog и $row_object. Удивительно то что функция file_put_contents в таком виде строку считывала и создавала файлы.
Ну думай..думай а лучше все же посмотреть на ошибку - переведи если не понимаешь о чем она строки в базу обычно записывают в кавычках Код (Text): "UPDATE id_images SET href = ':href_new' WHERE id = :id"; а чего ей не создавать то? если путь есть картинка есть.... а запросы к БД это другое совсем --- Добавлено --- P/S/ и это не два вызова - не придумывай ерунды это стек вызовов в данном случае по факту одного предупреждения
"Обычно", но не в случае с подготавливаемыми запросами, где плейсхолдеры в строке запроса прописываются без кавычек.
PHP: <?php $host = '127.0.0.1'; $db = 'gigal'; $user = 'root'; $pass = ''; $charset = 'utf8'; $objectId = ''; $image = ''; $row = ''; $id = ''; $number_catalog = 1; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // Инициализируем переменные к подключению $opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $user, $pass, $opt); // Подключаемся через PDO $stmt = $pdo->query('SELECT * FROM id_images'); // Выбираем каждый блок в таблице id_images while ($row = $stmt->fetch(PDO::FETCH_LAZY)) // Проходимся циклом и переносим даннные по папкам { $row_object = $row['objectId']; $row_image = $row['image']; $id_image = $row['id']; $type_image = $row['ext']; $count_dir = count(glob("../uploads/image/{$number_catalog}/*")); if($count_dir < 100) { $strukture = "../uploads/image/{$number_catalog}/"; $path = $strukture.$row_object; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_old = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; /* $sql = "UPDATE id_images SET href = ':href_old'"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_old'=>$href_old)); */ $pdo->exec("UPDATE id_images SET href = '$href_old'"); } else { $number_catalog++; mkdir($strukture,true); mkdir($path,true); file_put_contents("../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}", $row_image); $href_new = '../uploads/image/{$number_catalog}/{$row_object}/{$id_image}.{$type_image}'; /* $sql = "UPDATE id_images SET href = ':href_new'"; $stmt = $pdo->prepare($sql); $stmt->execute(array(':href_new'=>$href_new)); */ $pdo->exec("UPDATE id_images SET href = '$href_new'"); } } ?> Получилось прогнать циклом но через exec() только и в href каждая строка зашла но теперь проблема в том что значение переменной не заходит. ../uploads/image/{$number_catalog}/{$row_object}/{ - путь Должно быть так: ../uploads/image/1/6824/568.jpg Колонка href VARCHAR 50 длина
ADSOFT Большое тебе спасибо что помог а то бы я дальше парился с INSERTOM. Удалось вывести переменные вместо {$a} использовал '.$a.' Еще раз всем спасибо, как закрыть тему? --- Добавлено --- Модераторы закройте тему пожалуйста.