BindParam в цикле foreach

196
26 апреля 2018, 09:15
private function SqlExecute($sql, $array = [], $param = [])
{
    if(sizeof($array) == sizeof($param))
    {
        $ini__li = $this->Connect();
        $Query = $ini__li->prepare($sql);
        $pr = [
            0 => PDO::PARAM_INT,
            1 => PDO::PARAM_STR
        ];

            $i = 0;
            foreach($array as $key => $str)
            {
                $p = $param[$i];
                $Query->bindParam($key, $str, $pr[$p]);
                $i++;
            }
        return $Query->execute();
    }else{
        return false;
    }
}

В массиве $param передаются значения 0 или 1.
В массиве $array, ключ маски и значение.
Некоторые запросы выполняются, а некоторые нет. Не могу найти ошибку.

Answer 1

PDOStatement::bindParam Связывает переменную PHP с именованным или неименованным параметром подготавливаемого SQL-запроса. В отличие от PDOStatement::bindValue(), переменная привязывается по ссылке и ее значение будет вычисляться во время вызова PDOStatement::execute().

Вы передаете переменную $str, но видно, что она передается по ссылке и когда вы меняете переменную $str она меняется и внутри запроса. В процессе цикла вы именно ее и меняете,то есть цикл это делает автоматически.

По этой причине я заменил временную переменную цикла $str, на переменную $array[$key], эта переменная не будет менять свое значение и во время запроса (execute) будет иметь тоже значение что и в цикле

private function SqlExecute($sql, $array = [], $param = [])
{
    if(sizeof($array) == sizeof($param))
    {
        $ini__li = $this->Connect();
        $Query = $ini__li->prepare($sql);
        $pr = [
            0 => PDO::PARAM_INT,
            1 => PDO::PARAM_STR
        ];

            $i = 0;
            foreach($array as $key => $str)
            {
                $p = $param[$i];
                $Query->bindParam($key, $array[$key], $pr[$p]);
                $i++;
            }
        return $Query->execute();
    }else{
        return false;
    }
}
READ ALSO
PHP вытянуть данные из файла

PHP вытянуть данные из файла

Подскажите пожалуйста

224
Передача данных с blade, laravel

Передача данных с blade, laravel

у меня есть примерно такая форма:

223
Авторизация ВК по лоигну и паролю PHP

Авторизация ВК по лоигну и паролю PHP

Как сделать авторизацию ВК по логину и паролю? Документация вроде требует разрешение на такую авторизацию и то с лимитамиХочу сделать автопостинг...

185