[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: не срабатывает запрос в mysql
kent666
Помогите! почему то не срабатывает запрос
к примеру
INSERT INTO `images` VALUES ('5', '2012-01-10 14:09:12', 'Второе изображение', '1326197352', NULL, '1');

использую штатную функцию mysql_query()

выдает ошибку
Цитата

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 'INSERT INTO `images` VALUES ('5', '2012-01-10 14:09:12', 'Второе изоб�' at line 2

Не знаю в чем проблема. Кодировка вроде бы везде utf-8
Вот структура таблицы
CREATE TABLE IF NOT EXISTS `images` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`description` varchar(500) DEFAULT NULL,
`name` varchar(500) NOT NULL,
`main` int(1) DEFAULT NULL,
`section_id` int(10) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;"




Спустя 3 минуты, 6 секунд (24.01.2012 - 15:37) neadekvat написал(а):
> at line 2
Очень интересно, учитывая, что у тебя запрос состоит из одной.

Спустя 43 секунды (24.01.2012 - 15:38) inpost написал(а):
а запрос показать? А обработку?
К тому же в начале введи колонки, что под что добавляется.

Спустя 47 секунд (24.01.2012 - 15:39) kent666 написал(а):
neadekvat да это просто он первую строку нормально прочитал smile.gif
А дальше чего то выбивает так

Спустя 33 секунды (24.01.2012 - 15:39) neadekvat написал(а):
kent666, попробуй таки перечислить поля, а также выполнить запрос в pma или через консоль.

Спустя 5 минут, 51 секунда (24.01.2012 - 15:45) kent666 написал(а):
А без перечисления полей можно как-то обойтись?
Если нельзя то каким запросом можно получить наименование полей таблицы в mysql?
Дело в том что в процессе выполнения я не знаю наименование полей!!!


Спустя 1 минута, 8 секунд (24.01.2012 - 15:46) inpost написал(а):
kent666
Как ты не знаешь? sql-inj ? smile.gif
Первый запрос на выборку из БД, mysql_fetch_assoc, где ключ массива - имя колонки.

Спустя 48 секунд (24.01.2012 - 15:47) neadekvat написал(а):
Цитата (kent666 @ 24.01.2012 - 16:45)
Дело в том что в процессе выполнения я не знаю наименование полей!!!

*мат*

Спустя 2 минуты, 30 секунд (24.01.2012 - 15:50) kent666 написал(а):
Данный скрипт предназначен для резервного копирования базы данных!
    $db = new db($db_host, $db_user, $db_password, $db_name);

$dump_dir = SVV_ROOT ."setup/dump"; // директория, куда будем сохранять резервную копию БД


if($ok)
{
$res = $db->mysqlQuery("SHOW TABLES");

$sqlFile = SVV_ROOT ."setup/dump/". time() .".sql";

$query = '';
while( $table = mysql_fetch_row($res) )
{
$query .= "TRUNCATE TABLE `". $table[0] ."`;\n";
$r = $db->mysqlQuery('SELECT * FROM `'.$table[0].'`');
if(mysql_num_rows($r) > 0)
{

while ($row = mysql_fetch_assoc($r))
{
$i=0;
$query .= "INSERT INTO `".$table[0]."` VALUES (";
foreach ($row as $field )
{
if (is_null($field)){
$field = "NULL";
}
else{
$field = "'".mysql_escape_string( $field )."'";
}
if($i==0){
$query .= ', ';
}
$query .= $field;
}
$query .= ");\n";
}
}
}

file_put_contents($sqlFile, $query);
reDirect();
}
if($edit)
{
$query = file_get_contents($sqlFile = SVV_ROOT ."setup/dump/1327405437.sql", true);
$db->mysqlQuery($query);
}

В процессе работы он проходит по всем таблицам и извлекает все данные!
Каким образом или каким запросом я могу получить список полей таблицы? :unsure:

Спустя 2 минуты, 10 секунд (24.01.2012 - 15:52) inpost написал(а):
kent666
http://dev.mysql.com/doc/refman/5.0/en/extended-show.html
SHOW <- имеет много функций, посмотри их.

Спустя 2 минуты, 1 секунда (24.01.2012 - 15:54) neadekvat написал(а):
Цитата (kent666 @ 24.01.2012 - 16:50)
Данный скрипт предназначен для резервного копирования базы данных!

Скачай Sypex Dumper и посмотри, как он внутри сделан.

Спустя 55 минут, 20 секунд (24.01.2012 - 16:49) kent666 написал(а):
Исправил! Через консоль работает нормально, а через php выдает ошибку
запрос
TRUNCATE TABLE `images`;
INSERT INTO `images` (id, date, description, name, main, section_id) VALUES ('7', '2012-01-12 10:33:18', 'Четвертый рисунок', '1326357198', NULL, '1');
INSERT INTO `images` (id, date, description, name, main, section_id) VALUES ('5', '2012-01-10 14:09:12', 'Второе изображение', '1326197352', NULL, '1');

Выдает ошибку типа
Цитата
2012-01-24 04:40:43 MySQL error:
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 'INSERT INTO `images` (id, date, description, name, main, section_id) VALUES ('7'' at line 2

Спустя 2 часа, 34 минуты, 52 секунды (24.01.2012 - 19:24) inpost написал(а):
kent666
mysql не поддерживает несколько запросов ПОДРЯД.
Именно поэтому она считается устаревшей и не выходит больше обновлений.
Сейчас все переходят на mysqli , которая, как написано в мануале: "поддерживает транзакции и множественные запросы"

Спустя 1 час, 52 минуты (24.01.2012 - 21:16) kent666 написал(а):
inpost а вот этот mysqli есть на всех хостингах?
Или как посмотреть будет ли mysqli работать! smile.gif

Спустя 4 минуты, 33 секунды (24.01.2012 - 21:21) Игорь_Vasinsky написал(а):
в Mysqli - есть мульти запрос, но это не об этом
в mysql - можно выполнить несколько запросов подряд, но с mysql_query()


ТС - ты все INT значения записываемые в БД пропиши без кавычек.

INSERT INTO `images` VALUES (5, '2012-01-10 14:09:12', 'Второе изображение', 1326197352, NULL, 1);

Спустя 3 минуты (24.01.2012 - 21:24) inpost написал(а):
kent666
mysqli - это библиотека для работы с БД, такая же как mysql.
Cмотреть тут: phpinfo(); Есть целый раздел для mysqli.

Спустя 5 минут, 33 секунды (24.01.2012 - 21:29) kent666 написал(а):
Игорь_Vasinsky я не знаю наперед какие данные буду int а какие нет
Вообще данный скрипт это резервное сохранение БД. Я немного переделал твой скрипт

$db = new db($db_host, $db_user, $db_password, $db_name);

$dump_dir = SVV_ROOT ."setup/dump"; // директория, куда будем сохранять резервную копию БД


if($ok)
{
$sqlFile = SVV_ROOT ."setup/dump/". time() .".sql";
$res = $db->mysqlQuery("SHOW TABLES");
$query = array();

while( $table = mysql_fetch_row($res) )
{
$query[]= "TRUNCATE TABLE `". $table[0] ."`";
$res1 = $db->mysqlQuery('SHOW COLUMNS FROM '. $table[0]);
$c = array();
if(mysql_num_rows($res1) > 0)
{
while($row = mysql_fetch_assoc($res1))
{
$c[] = '`'. $row['Field'] .'`';
}
$column = implode(', ', $c);
}

$res2 = $db->mysqlQuery('SELECT * FROM `'.$table[0].'`');
if(mysql_num_rows($res2) > 0)
{
while ($row = mysql_fetch_assoc($res2))
{
$val = array();
foreach ($row as $field )
{
if (is_null($field)){
$field = "NULL";
}else{
$field = "'".mysql_escape_string( $field )."'";
}
$val[] = $field;
}
$query[]= "INSERT INTO `".$table[0]."` (". $column .") VALUES (". implode(', ', $val) .")";
}
}
}

file_put_contents($sqlFile, serialize($query));
reDirect();
}
if($edit)
{
$query = unserialize(file_get_contents($sqlFile = SVV_ROOT ."setup/dump/1327416535.sql"));
foreach($query as $val){
$db->mysqlQuery($val);
}
}

Спустя 56 секунд (24.01.2012 - 21:30) kent666 написал(а):
inpost спасибо за информацию.

Спустя 7 минут, 48 секунд (24.01.2012 - 21:38) Игорь_Vasinsky написал(а):
kent666
но структуру таблицы то ты показал biggrin.gif а там видно что и какое поле может принять и в каком виде. не понимаю тебя.

Спустя 33 минуты, 3 секунды (24.01.2012 - 22:11) kent666 написал(а):
Игорь_Vasinsky в принципе да. Тип я тоже могу определить. Значит завтра переделаю в класс с использованием mysqli да и тип тип поля тоже учту. Спасибо smile.gif

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.