Как использовать переменную в качестве имени параметра в PHP SQLite3 bindparam - PullRequest
0 голосов
/ 30 апреля 2020

Я использую SQLite3 и PHP и пытаюсь написать обобщенную c функцию для выполнения моих запросов.

Для этого я хотел бы получить имя параметров из переменных в bindParam.

Но, похоже, это не работает. Вот код, показывающий неожиданное поведение:

<?php
header("Content-Type: text/plain");
    $db = new SQLite3(':memory:');
    $db->exec("create table mytable (lsid integer primary key autoincrement, usid TEXT, source TEXT)");

    $myid = 'agoodid';
    $mydatasources = array('home', 'news');
    foreach($mydatasources as $datasource)  {
        $params[] = array(':datasource' => $datasource, ':usid' => $myid);
    }
    echo "here are the inputs : " .PHP_EOL;
    print_r($params);

    $querystring = 'insert into mytable (source, usid) values (:datasource, :usid)' ;
    echo " I prepare the query '$querystring'" . PHP_EOL;
    $query = $db->prepare($querystring);
    foreach($params as $set) {
        foreach($set as $key => $value) {
            echo "  Setting $key = $value." . PHP_EOL;
            $query->bindParam($key, $value, SQLITE3_TEXT);
        }
        echo " I execute the query" . PHP_EOL;
        $queryres[] = $query->execute();
        $query->reset();
    }

    $results = $db->query('select * from mytable');
    echo "and here is what I get : " . PHP_EOL;
    while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
        print_r($row);
    }

?>

А вот и конечный результат:

Array
(
    [lsid] => 1
    [usid] => agoodid
    [source] => agoodid
)
Array
(
    [lsid] => 2
    [usid] => agoodid
    [source] => agoodid
)

Кажется, что все параметры связаны со значением последнего связанного параметра.

Ожидаемый результат:

Array
(
    [lsid] => 1
    [usid] => agoodid
    [source] => home
)
Array
(
    [lsid] => 2
    [usid] => agoodid
    [source] => news
)

Как это сделать? Напомним, что цель состоит в том, чтобы не жестко кодировать имя параметра в bindParam.

1 Ответ

0 голосов
/ 30 апреля 2020

Я неправильно понял binParam. он прикрепляет к данному параметру в запросе sql ссылку на данную переменную в php. Я должен использовать bindValue вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...