133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
|||||||||||
1 | |||||||||||
INSERT подготовленный запрос10.02.2020, 08:45. Показов 1333. Ответов 11
Метки нет (Все метки)
Здравствуйте.
Имеется массив данных, $data Код
Array ( [0] => 1 [1] => 2 [2] => 5 [3] => desc,names,counts [4] => 2020-02-10 08:08:24 [5] => 1 [6] => 2 [7] => 78 [8] => 5 [9] => desc [10] => 1 [11] => Мороженное [12] => asdfasdf )
0
|
10.02.2020, 08:45 | |
Ответы с готовыми решениями:
11
Не выполняется подготовленный запрос (PHP PDO ODBC + MS Access) Перенос параметра при INSERT в другой запрос INSERT Запрос INSERT INTO как построить запрос правильно? Запрос INSERT |
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|
10.02.2020, 09:14 | 2 |
u4en1k, до поля status у вас ещё два поля находится: `desc`,`names`
тогда вопрос: что находиться в переменной $imp_column ? Ожидается тоже 2 поля, но вы эту переменную заворачивайте в косые кавычки. Тогда получается одно поле. И в переменной $types у вас 14 элементов а не 13
0
|
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
|
10.02.2020, 09:33 [ТС] | 3 |
sasha0012, все верно,
это и есть `desc`,`names` так как первоначально они имеют вид desc`,`names implode('`,`',$name_field'); то есть запрос собирается, их может быть разное кол-во. Поэтому их нужно завернуть. Почему 14, а не 13, когда $types Добавлено через 1 минуту Пробел для наглядности указал в первом примере, в $types.
0
|
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
||||||
10.02.2020, 10:00 | 4 | |||||
bind_param - Количество переменных и длина строки types должны в точности соответствовать количеству параметров в запросе.
видимо придется вручную прописывать переменные через запятую:
0
|
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
||||||
10.02.2020, 10:18 [ТС] | 5 | |||||
sasha0012, вся сложность в том, что не будет такой возможности определить за ранее вручную сколько имеется полей и имеется значений.
Не по теме: Сначала я читаю документации, пытаюсь найти ответы на просторах интернета, а после уже того, как пройдет много часов и задача остается не решенной спрашиваю на форуме. И дело в том, что этот код работает без подготовленного запроса, а обрабатываются данные перед записью с помощью mysqli_real_escape_string
0
|
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|||||||||||
10.02.2020, 10:36 | 6 | ||||||||||
конечно сработает, ведь в этом случае обойдётся без bind_param.
Дело в том что bind_param не может принимать массив, он даже не может принять просто список значений через запятую. Только значения в виде ссылок (если я не ошибаюсь). Попробуйте так составить запрос:
ещё так можно попробовать:
1
|
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
|
10.02.2020, 10:47 [ТС] | 7 |
sasha0012, К сожалению, ни одно из выше указанных Вами решений не сработало.
Не по теме: Буду думать как уже встану, а на этой ноте пойду отдыхать. Хорошего дня, спасибо за помощь:)
0
|
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
||||||||||||||||
10.02.2020, 14:55 | 8 | |||||||||||||||
u4en1k, какой красивый косяк вышел из за неправильного сравнения с true и использования функции не по назначению. Вот как раз на таких примерах и происходит самое продуктивное обучение.
iiisiiiiisiss - пятый элемент указан под типом "i" (числовой), а в массиве данных там: 2020-02-10 08:08:24. Это разве число? Тогда вопрос, почему записался "i"? Смотрим дге он определяется:
2 - если сравниваете булево значение, то всегда используйте сравнение по типу тоже:
и с floatval такая же история:
0
|
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
|||||||||||||||||||||
11.02.2020, 01:35 [ТС] | 9 | ||||||||||||||||||||
sasha0012,
iiissiiississ
подготовленный запрос имеет такой вид
$data Код
Array ( [0] => 1 [1] => 2 [2] => 5 [3] => plombir,morojennoe,counts,name,description [4] => 2020-02-11 00:57:38 [5] => 1 [6] => 2 [7] => 78 [8] => 5 [9] => plombir [10] => 1 [11] => Мороженное [12] => adsfasdfadsf )
0
|
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|||||||||||
11.02.2020, 10:09 | 10 | ||||||||||
Ну как это не работает!? Ещё как работает! У вас в массиве все данные строковые! Числовые данные в массиве так задаются:
0
|
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
|
|
11.02.2020, 10:58 [ТС] | 11 |
sasha0012, Если неизвестное кол-во значений?
0
|
1113 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|||||||||||
11.02.2020, 11:41 | 12 | ||||||||||
Сообщение было отмечено u4en1k как решение
Решение
тогда mysqli_real_escape_string либо PDO
Добавлено через 29 минут u4en1k, при работе с функцией mysqli_real_escape_string запомните одно правило: данные обработанные этой функцией, в sql запросе всегда заворачивайте в одинарные кавычки. Если в запрос нужно поставить число, то не нужно прогонять эту переменную через mysqli_real_escape_string, а просто приводите её к числовому типу. Пример:
1
|
11.02.2020, 11:41 | |
11.02.2020, 11:41 | |
Помогаю со студенческими работами здесь
12
Не получается запрос INSERT INTO INSERT запрос (MVC) INSERT-запрос в MVC Не работает запрос INSERT Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |