Пожалуйста, проверьте руководство, соответствующее версии вашего сервера MySQL.

Добрый день! У меня возникла проблема с SQL-запросом. Он выдает следующую ошибку: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', 'Фото'='photo_2024-07-31_23-13-09.jpg'' at line 1". Вот сам запрос: <br/> $query = "INSERT INTO newUser SET ФИО='$fullname', Компания='$company', ТелНомер=$phone, email='$email', ДР=$birthday, Фото='$photo'". Можете помочь разобраться с ошибкой?
  • 4 декабря 2024 г. 10:53
Ответы на вопрос 3
Ваша ошибка в SQL-запросе связана с тем, как вы формируете строку запроса, а именно, с отсутствием кавычек для некоторых переменных и возможным неправильным синтаксисом. Давайте рассмотрим ваш запрос и исправим его.

Вот ваш изначальный запрос:

```sql
$query = "INSERT INTO newUser SET ФИО='$fullname', Компания='$company', ТелНомер=$phone, email='$email', ДР=$birthday, Фото='$photo'"
```

1. Для всех строковых значений должны быть использованы одинарные кавычки. Это касается переменных, которые могут быть строками. Убедитесь, что переменные, такие как `$phone`, `$birthday`, также правильно обрабатываются.
2. Если `$phone` и `$birthday` — это строки (например, номер телефона и дата рождения), то они тоже должны быть заключены в кавычки.
3. Кроме того, рекомендуется использовать параметризированные запросы (например, через `prepared statements`), чтобы избежать SQL-инъекций.

С учетом вышесказанного, исправленный запрос будет выглядеть так:

```php
$query = "INSERT INTO newUser SET ФИО='$fullname', Компания='$company', ТелНомер='$phone', email='$email', ДР='$birthday', Фото='$photo'";
```

Если `ТелНомер` и `ДР` являются строками, то они должны быть заключены в кавычки. Если же это числовые поля, тогда кавычки не нужны. Убедитесь, что тип данных в базе данных соответствует тому, что вы передаете.

Вот окончательный вариант с учетом, что все поля строки:

```php
$query = "INSERT INTO newUser SET ФИО='$fullname', Компания='$company', ТелНомер='$phone', email='$email', ДР='$birthday', Фото='$photo'";
```

Кроме этого, чтобы избежать возможных ошибок с кавычками и уязвимостей, лучше использовать подготовленные выражения, например, с помощью `mysqli` или `PDO`.

Пример использования `mysqli` с подготовленными выражениями:

```php
$stmt = $mysqli->prepare("INSERT INTO newUser (ФИО, Компания, ТелНомер, email, ДР, Фото) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssss", $fullname, $company, $phone, $email, $birthday, $photo);
$stmt->execute();
$stmt->close();
```

Это уменьшит риск SQL-инъекций и упростит процесс работы с данными.
Во-первых, не нужно использовать конкатенацию, нужно использовать подготовленные выражения. 
Во-вторых, точно не нужно использовать конкатенацию.
В-третьих, значение телефона (и даты) нужно взять в кавычки, как всё остальное. Убедиться, что это решает проблему, а потом переписать на подготовленные выражения.
Добрый день! 
для INSERT используйте конструкцию INSERT INTO table_name (column1,column2...) values(value1,value2...)

Ваш запрос будет выглядеть так:
INSERT INTO newUser (fio,company,tel,email,birthday,photo) values($fullname,$company,$phone,$email,$birthday,$photo)

ещё не рекомендую использовать русские названия для колонок.
Похожие вопросы