Наверх

Запросы INSERT и UPDATE на PDO

// 'modx_table_name', array('row1' => 1, 'row2' =>2)
function _INSERT($table, $data){
	$keys = array_keys($data);
	$fields = '`' . implode('`,`', $keys) . '`';
	$placeholders = substr(str_repeat('?,', count($keys)), 0, -1);
	$sql = "INSERT INTO {$table} ({$fields}) VALUES ({$placeholders});";
	$stmt = $this->modx->prepare($sql);
	if (!$stmt->execute(array_values($data))) {
		$this->modx->log(1, print_r($stmt->errorInfo(), true) . ' SQL: ' . $sql);
	}
}

// 'modx_table_name', array('row1' => 1, 'row2' => 2), 'id', 1
function _UPDATE($table, $data, $key, $val){
	if(!$key || !$val) return false;
	$placeholders = array();
	foreach(array_keys($data) as $k) $placeholders[] = "`{$k}` =?";
	$placeholders = implode(', ', $placeholders);
	$data = array_values($data);
	array_push($data,$val);
	$sql = "UPDATE {$table} SET {$placeholders} WHERE `{$key}` =?;";
	$stmt = $this->modx->prepare($sql);
	if (!$stmt->execute(array_values($data))) {
		$this->modx->log(1, print_r($stmt->errorInfo(), true) . ' SQL: ' . $sql);
	}
}


8 комментариев

  1. Артур 27 декабря 2018, 11:21(Комментарий был изменён) # 0
    Илья, скажите, для чего нужен символ «точка с запятой» перед закрывающей текст запроса кавычкой? Она у вас и первом примере и во втором.
    UPDATE {$table} SET {$placeholders} WHERE `{$key}` =?; <-вот 
    Она тут точно не лишняя? Убрал кавычки, чтобы было понятнее.
    1. Илья Уткин 27 декабря 2018, 14:49 # 0
      Не знаю) Может, и лишняя. Вообще, точкой с запятой разделяются разные команды для MySQL. Так что ошибку этот символ вызвать не должен, но и удалить его тоже не возбраняется)
    2. Сергей 30 мая 2019, 16:13 # 0
      Я так полагаю, это примеры методов для каких то классов т.к. предполагается, что объект modx передан в качестве аргумента судя по выражению $this->modx->prepare($sql);
      1. Lohmatiy 01 июля 2019, 13:35 # 0
        Пытаюсь использовать этот код в сниппете — безуспешно(
        $stmt = $this->modx->prepare($sql);
        заменил на
        $stmt = $modx->prepare($sql);
        PHP выдает предупреждение PHP notice: Undefined variable: modx,
        и затем
        Fatal error: Call to a member function prepare() on a non-object in 
        Вывел вардамп $sql-
        INSERT INTO amocrm_data (`name`,`company`,`phone`,`email`,`session_id`,`comment`,`type`,`family`,`istochnik`,`form_type`,`fio`,`utm_source`,`utm_medium`,`utm_campaign`,`utm_term`,`utm_content`,`url`,`time`,`answers`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
        Что я делаю не так?
        1. Lohmatiy 01 июля 2019, 13:59 # 0
          Не передаю $modx в функцию( Разобрался. Объявил глобальной
          1. Lohmatiy 01 июля 2019, 16:29 # 0
            И да, все таки была ошибка PHP warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
            Решилось заменой
            $stmt->execute($data)
            на
            $stmt->execute(array_values($data));
            1. Яна 17 октября 2019, 19:16 # 0
              $stmt->errorInfo -> надо $stmt->errorInfo() =)
              1. Илья Уткин 18 октября 2019, 07:36 # 0
                Поправил, спасибо)

              Авторизация

              через сервис Loginza:


              Шаблоны MODX

              1 2 Дальше »

              Объектная
              модель
              MODX