Я пытаюсь проверить значение ассоциативного массива, если оно числовое, вот мой код
$data = array('fullname'=>'Salah Saed', 'age'=>'33', 'gender'=>'Female'); public function insert($data, $table){ /*$query = "INSERT INTO `oop_crud`.`customers` ("; $query .= "`fullname` , `age` , `gender` )"; $query .= "VALUES ('".$fullname."', '".$age."', '".$gender."')"; */ $feilds = array(); $feilds_value = array(); foreach ($data as $field => $field_value){ $feilds[] = $field; echo $field; if (is_numeric($field_value)){ $feilds_value[] = $field_value; }else{ $feilds_value[] = "'".$field_value."'"; } } $query = "INSERT INTO ".$table." ("; $query .= implode(',', $feilds).")"; $query .= "VALUES ("; $query .= implode(',',$feilds_value).")"; echo $query;
Он возвращает строку, поэтому, что не так с моим кодом, в разделе условий я использовал $ field_value, и эта переменная имеет данные массива, сеет, как получить значение массива.
Прежде всего, вставки MySQL не зависят от типа, поэтому
SET UserAge = '33'
такой же как
SET UserAge = 33
поэтому вам было бы безопаснее добавлять цитаты. Тем не менее, вы являетесь наиболее безопасным, если вы ищете подготовленные заявления с использованием PDO (также называемых параметризованными запросами). Взгляните на это
Предполагается, что http://php.net/is_numeric распознает такие значения, как 0x539
и 0b10100111001
которые не могут быть распознаны MySQL; вам нужно будет проверить эти случаи.
Вот упрощенная версия вашей функции, если вы хотите улучшить функцию генератора запросов,
function insert($data, $table){ $column_sql = '`' . implode('`,`', array_keys($data)) . '`'; $record_sql = "'" . implode("','", $data) . "'"; return "INSERT INTO `{$table}` ({$column_sql}) VALUES ({$record_sql})"; }
Подача его $data
и test
даст
INSERT INTO `test` (`fullname`,`age`,`gender`) VALUES ('Salah Saed','33','Female')
ПРИМЕЧАНИЕ. Необходимо избегать значений mysqli_real_escape_string()
, я оставлю это до вас, как упражнение 🙂