PHP/MySQL | Биндим автоматом массив параметров PDO

DELETED
Автор
12 августа 2017, в 12:42
Delete
<?php
function assoc($sql, $array = [])
{
global $pdo;
$sql = $pdo->prepare($sql);
foreach ($array as $key => $value) {
if (is_bool($value)) {
$type = PDO::PARAM_BOOL;
} elseif (is_null($value)) {
$type = PDO::PARAM_NULL;
} elseif (is_int($value)) {
$type = PDO::PARAM_INT;
} elseif (is_string($value)) {
$type = PDO::PARAM_STR;
} else {
$type = false;
}
$sql->bindValue($key, $value, $type);
}
$sql->execute();
return $sql->fetch();
}
но смущает условие $type = false;
то есть на практике не очень понятно что произойдёт в этом случае с запросом - выполнение остановится или продолжится без типа параметра?
может убрать это условие?
.45.
________
посл. ред. 12.08.2017 в 12:43; всего 1 раз(а); by PhpStorm

DELETED
12 августа 2017, в 13:22
Delete

DELETED
Автор
12 августа 2017, в 13:24
Delete
shadrvlad (12.08.2017 в 13:22)
PhpStorm, зачем такие костыли?
PhpStorm, зачем такие костыли?
ключевые слова ЗАБИНДИТЬ и АВТОМАТОМ

простой обработки массива параметров методом exucute($array) стало недостаточно


DELETED
12 августа 2017, в 15:29
Delete

DELETED
Автор
12 августа 2017, в 15:44
Delete
shadrvlad (12.08.2017 в 15:29)
PhpStorm, делается уж тогда в обертке к пдо, зачем отдельную функция с global $pdo и тд
PhpStorm, делается уж тогда в обертке к пдо, зачем отдельную функция с global $pdo и тд
потому что это только часть функции для обработки именованных параметров, для бинда неименованных в ней ещё будет добавлена проверка на наличие ключа и счётчик вместо имени параметра
там вопрос был в первом посте про $type = false;

DELETED
Автор
12 августа 2017, в 19:19
Delete
<?php
class MyPDO
{
protected const DB_HOST = 'localhost';
protected const DB_NAME = 'test';
protected const DB_USER = 'root';
protected const DB_PASS = '';
protected const DB_CHAR = 'utf8';
public static function connect()
{
$opt = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => true];
$dsn = 'mysql:host=' . self::DB_HOST . ';dbname=' . self::DB_NAME . ';charset=' . self::DB_CHAR;
return new PDO($dsn, self::DB_USER, self::DB_PASS, $opt);
}
public static function run($sql, $params = [])
{
$query = self::connect()->prepare($sql);
if (empty($params[0])) {
foreach ($params as $key => $value) {
if (is_bool($value)) {
$type = PDO::PARAM_BOOL;
} elseif (is_null($value)) {
$type = PDO::PARAM_NULL;
} elseif (is_int($value)) {
$type = PDO::PARAM_INT;
} elseif (is_string($value)) {
$type = PDO::PARAM_STR;
} else {
$type = false;
}
$query->bindValue($key, $value, $type);
}
} else {
$i = 1;
foreach ($params as $value) {
if (is_bool($value)) {
$type = PDO::PARAM_BOOL;
} elseif (is_null($value)) {
$type = PDO::PARAM_NULL;
} elseif (is_int($value)) {
$type = PDO::PARAM_INT;
} elseif (is_string($value)) {
$type = PDO::PARAM_STR;
} else {
$type = false;
}
$query->bindValue($i, $value, $type);
$i++;
}
}
$query->execute();
return $query;
}
}
Нужно ли тут условие?
$type = false;
.45.
________
посл. ред. 12.08.2017 в 19:31; всего 2 раз(а); by PhpStorm