Мне кажется, что вы используете mysqli
для подключения к базе данных и старой функции mysql_real_escape_string()
, чтобы избежать ваших значений. Поскольку mysql_real_escape_string
имеет 2 параметра, и вы не можете передать 2 параметра функции с помощью функции array_map
, второй параметр ($dblink
) пытается использовать его значение по умолчанию (последнее открытое соединение mysql или нет открытого подключения, которое он пытается открыть, используя расширение). Поскольку у вас нет открытых подключений и, скорее всего, нет соединений, определенных в вашем открытии конфигурации, новое соединение не будет работать через старый API.
Вместо этого используйте вместо этого mysqli_real_escape_string()
.
$row = array_map(array($db, 'real_escape_string'), $row);
(Если вы не используете Mysqli расширение, но старый MySQL, это подходящее время, чтобы изменить на новый, так как старый расширение MySQL является устаревшим)
О запросах: Вы используете лимит без предложения ORDER BY
. В MySQL нет стандартного заказа, поэтому строки, возвращаемые вашим запросом выбора, не определены.
Кроме того, вы можете сделать эту операцию в одном запросе с помощью INSERT..SELECT
синтаксиса:
INSERT INTO {table}
SELECT * FROM {table} ORDER BY {order_field} LIMIT 1000
Примечания: это всегда хорошая практика, чтобы не использовать астронома запросов (звезда для астрономов), но список все колонны.
(1) Вы действительно просто вставляете обратно в тот же стол? (2) вы ничего не делаете с '$ sql'. (3) ли '$ db-> query()' возвращает результат? обычно вам нужно сделать '-> fetch()' – Sean
(1), да, та же таблица. (2) Мне нужен print sql, вы можете думать, что это $ sql => $ str, (3) $ db-> query() возвращает двоичный массив, затем используйте foreach traverse it @Sean –
- это '$ db' соединение' mysql' (или 'mysqli')? – Sean