Здравствуйте. Есть такое условие: PHP: if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'server_monitoring' => 1, 'server_status' => 2))) { $result = "Запрашиваемый сервер не существует!"; } В server_monitoring указано значение 1. А нужно, чтобы поддерживалось 1 и 2. Как это реализовать?
В условии server_monitoring должен быть равен 1. А мне нужно исправить, чтобы был либо 1, либо 2. PHP: 'server_monitoring' => 1
PHP: public function getTotalServers($data = array()) { $sql = "SELECT COUNT(*) AS count FROM `servers`"; if(!empty($data)) { $count = count($data); $sql .= " WHERE"; foreach($data as $key => $value) { $sql .= " $key = '" . $this->db->escape($value) . "'"; $count--; if($count > 0) $sql .= " AND"; } } $query = $this->db->query($sql); return $query->row['count']; }
Попробуйте так А чего мне то объясняешь, я это знаю.. Но без знаний какие параметры ожидаются и как их обрабатывают хрен скажешь ))) С мобилы неудобно, может завтра напишу..
Чтоб сильно не изменять логику и вызов функции предлагаю так PHP: public function getTotalServers($data = array()) { $sql = "SELECT COUNT(*) AS count FROM `servers`"; if(!empty($data)) { $count = count($data); $sql .= " WHERE"; foreach($data as $key => $value) { if (is_array($value)) { $sql .= " $key IN (" . implode(',',$value) . ")"; } else { $sql .= " $key = '" . $this->db->escape($value) . "'"; } $count--; if($count > 0) $sql .= " AND"; } } $query = $this->db->query($sql); return $query->row['count']; } ну и вызывать функцию PHP: if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'server_monitoring' => [1,2], 'server_status' => 2))) { $result = "Запрашиваемый сервер не существует!"; ... сознательно убрал экранирование значений, так как судя по всему они жестко передаются в параметрах, а не от пользователя и с целью упрощения понимания. Если нужно экранирование - надо этот момент обработать самостоятельно )
PHP: public function getTotalServers( array $data = array() ) { $sql = 'SELECT COUNT(*) `count` FROM `servers`'; $db = $this -> db; $fun = static function ( $f ) use ( $db ) { if ( is_int ( $f ) ) { return $f; } return sprintf ( "'%s'", $db -> escape( $f ) ); }; if ( $data != array() ) { $a = array(); foreach ( $data AS $name => $values ) { if ( is_array ( $values ) ) { $a[] = $name . sprintf ( ' IN( %s )', implode ( ',', array_map ( $fun, $values ) ) ); } else { $a[] = $name . ' = ' . $fun( $values ); } } $sql .= ' WHERE ' . implode ( ' AND ', $a ); } return $db -> query( $sql ) -> row['count']; }