Задать вопрос
Umr001
@Umr001
php

Пытаюсь сделать что-то вроде квери билдера через PDO, но есть проблемы?

Это метод из класса, который отвечает за добавление записи в таблицу (это еще через mysqli):
public static function set($table, $fields = []) {
		$query = "INSERT INTO ".$table." (";
		$last = end($fields);
		foreach ($fields as $key => $value) {
			if($value != $last) {
				$query .= "`".$key."`,";
			} else {
				$query .="`".$key."`";
			}
		}
		$query .= ") VALUES (";
		foreach ($fields as $key => $value) {
			if($value != $last) {
				$query .= "'".$value."',";
			} else {
				$query .= "'".$key."'";
			}
		}
		$query .= ")";
		$msq = mysqli_query(Database::mysqlConnector(), $query);
		if(mysql) {
			return true;
		}
	}

Код кривой косой. Поэтому я решил переписать его через PDO, но понять не могу. Сделал то же самое почти, но так:
public static function set($table, $fields = []) {
		$query = "INSERT INTO ".$table." (";
		$last = end($fields);
		$pdo = Database::mysqlConnector();
		foreach ($fields as $key => $value) {
			if($value != $last) {
				$query .= $pdo->quote($key).",";
			} else {
				$query .= $pdo->quote($key);
			}
		}
		$query .= ") VALUES (";
		foreach ($fields as $key => $value) {
			if($value != $last) {
				$query .= $pdo->quote($value).",";
			} else {
				$query .= $pdo->quote($value);
			}
		}
		$query .= ")";
		$msq = $pdo->exec($query);
		if(msq) {
			return true;
		}
	}

И теперь он ругается на синтаксис. Гуглил, нагуглил плейсхолдеры, но с этим тоже у меня не вышло, хотя делал все по статье и не одной. Куда мне смотреть?
  • Вопрос задан
  • 292 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 2
kpa6uu
@kpa6uu
Программист Талибана [Пыхерский Алибаба]
$pdo->qoute
$pdo->quote

Может в этом проблема?)
Ответ написан
abler98
@abler98
Software Engineer
А какой смысл?

Если на то пошло, можно сделать примерно так:
public function insert($table, $attrs)
{
    $columns = implode(', ', array_keys($attrs));
    $placeholders = implode(', ', array_fill(0, count($attrs), '?'));
    $query = sprintf('INSERT INTO %s (%s) VALUES (%s)', $table, $columns, $placeholders);
    return $pdo->prepare($query)->execute(array_values($attrs));
}

P.S. Код не проверял

А проблема из-за $pdo->quote для имен столбцов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы