powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - execute
11 сообщений из 11, страница 1 из 1
PHP - execute
    #39491113
tonchikp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане! Требуется ваша помощь!

Подскажите, как эффективно и просто решить задачу:

Есть массив (кстати, может заменить на объект?) и две таблицы в базе данных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
$massive = [

'animal' => 'cat',
'age' => '1',
'color' => 'gray'

];

$db = new PDO('sqlite:file.sqlite');

$db -> exec("CREATE TABLE IF NOT EXISTS 'table1' (
id INTEGER PRIMARY KEY AUTOINCREMENT,

animal TEXT,
age INTEGER

)");

$db -> exec("CREATE TABLE IF NOT EXISTS 'table2' (
id INTEGER PRIMARY KEY AUTOINCREMENT,

animal TEXT,
color TEXT

)");

$prepare1 = $db -> prepare("INSERT INTO 'table1' (animal, age) VALUES (:animal, :age)");
$prepare2 = $db -> prepare("INSERT INTO 'table2' (animal, color) VALUES (:animal, :color)");



Цель: записать массив в обе таблицы . Вроде просто и не было бы вопроса, если бы можно было этот массив отдать в execute и он сам взял что ему необходимо, но насколько я знаю, больше чем нужно параметров нельзя указывать.

Прошу учесть, что задача упрощена! В таблицах куча колонок, а не по две как здесь, поэтому их перечисление трудоёмко, это и заставляет искать иные способы!
...
Рейтинг: 0 / 0
PHP - execute
    #39491142
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через bindParam ?
...
Рейтинг: 0 / 0
PHP - execute
    #39491143
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут подобный вопрос рассматривается
https://stackoverflow.com/questions/13491802/pdo-passing-extra-parameters-to-a-prepared-statment-than-needed
...
Рейтинг: 0 / 0
PHP - execute
    #39491166
tonchikp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

Ваш вариант правильный, но через BindParam вручную тяжело, представьте нужных полей много и лишних тоже много. Поэтому не хотелось бы перечислять их вручную, ищу автоматический способ
...
Рейтинг: 0 / 0
PHP - execute
    #39491175
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получи поля из базы и забинди нужные
...
Рейтинг: 0 / 0
PHP - execute
    #39491362
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
protected function plainInsert($table,$contents) {
        $fields=''; $values='';
        foreach($contents as $k=>$v) { 
            $fields.=",".$k; $values.=",:".$k; 
            $this->params[$k]=$v;
        } 
        $fields=substr($fields,1); $values=substr($values,1); // we dont care about UTF-8 - comma always 1 byte
        $this->sth=sprintf("insert `%s` (%s) values (%s)",$table,$fields,$values);
        $this->executeNonQuery();    
        return $this->dbh->lastInsertId();
    
    }
    
    protected function plainUpdate($table,$id,$contents) {
        $temp='';
        foreach($contents as $k=>$v) { 
            $temp.=sprintf(",%s=:%s ",$k,$k);
            $this->params[$k]=$v;
        }
        $this->params[$id['id']]=$id['val'];
        $temp=substr($temp,1); // we dont care about UTF-8 - comma always 1 byte
        $this->sth=sprintf("update `%s` set  %s where %s=:%s",$table,$temp, $id['id'],$id['id']);
        $this->executeNonQuery();    
    }
...
Рейтинг: 0 / 0
PHP - execute
    #39491366
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,

правильно, зачем эскейпить данные, и так сойдет
...
Рейтинг: 0 / 0
PHP - execute
    #39491370
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, есть косячок
...
Рейтинг: 0 / 0
PHP - execute
    #39491386
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,

str_replace("$","$$",$test)
...
Рейтинг: 0 / 0
PHP - execute
    #39491664
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,
конечо же % на %%
...
Рейтинг: 0 / 0
PHP - execute
    #39491756
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,
только что проверил - если скормить %s%%%s%d$2 - хавает и без экранирования....
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP - execute
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]