[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему SQL запрос вставляет 2 строки?
VladKamyshanov
Недавно делал обёртку для MySqli и при тестировании INSERT запроса на вставку одной(!) строки обнаружил необыкновенную странность - в базе появлялось две строки. Прикрепляю код класса:


class Database
{
private static $mysqli;

public static function connect($host, $db, $user, $pass)
{
self::$mysqli = mysqli_connect($host, $user, $pass, $db);

if (mysqli_connect_error())
{
printf("Ooops... Connection error: %s\n", mysqli_connect_error());
exit();
}
}


public static function query()
{
// Список аргументов
$args = func_get_args();
// Первый аргумент - шаблон
$template = array_shift($args);
// Подготавливаем шаблон
$stmt = self::$mysqli->prepare($template);
// Создаём строку типов
foreach ($args as $k => $val)
{
if (is_int($val)) $types .= "i";
elseif (is_double($val)) $types .= "d";
elseif (is_string($val)) $types .= "s";
elseif (is_null($val))
{
$types .= "s";
$args[$k] = "";
} else
{
$types .= "s";
$args[$k] = "";
}
}

// Добавляем информацию о типах
array_unshift($args, $types);
// Биндим параметры
call_user_func_array(array($stmt, "bind_param"), $args);
// Делаем запрос
$stmt->execute();
}
}


// Коннект к базе
Database::connect("/* Хост */", "/* Имя базы */", "/* Имя пользователя */", "/* Пароль */");
// Запрос
Database::query("INSERT INTO users VALUES(?,?,?,?,?)", "", "Name", "Surname", "Email", 1);



Заранее всем спасибо)



Спустя 27 минут (15.07.2012 - 23:37) VladKamyshanov написал(а):
Проблему решил.
Как оказалось, проблема в..... браузере. Дело в том, что в google chrome некие плагины либо делали запрос 2й раз, либо...... а чёрт его знает. В итоге, проверив скрипт через IE в таблице появилась одна строка. Избежать этой проблемы в хроме удалось редиректом на другую страницу, например:

// После всей той каши, что я прикрепил сверху, добавить что-то вроде:
header("Location:http://www.google.com");


Но пользуясь случаем хотел передать привет маме спросить у людей со стажем, годится ли такая обёртка для запросов к базе? Вот и всё. Спасибо всем, кто уделил внимание. :D

Спустя 2 часа, 59 минут, 23 секунды (16.07.2012 - 02:36) kamanch написал(а):
Вообще-то, при любой отправке формы, а тем более, если данные из нее идут в базу, необходимо делать редирект.
Иначе пользователи тебе по F5 заср захламят базу.

Спустя 9 часов, 8 минут, 38 секунд (16.07.2012 - 11:45) VladKamyshanov написал(а):
Цитата
Вообще-то, при любой отправке формы, а тем более, если данные из нее идут в базу, необходимо делать редирект.
Иначе пользователи тебе по F5 заср захламят базу.


Я знаю. Но это тестовый скрипт. Который запускается мной, только мной. Только начинаю использовать MySqli и писать под него обёртки, и, соответственно проверяю на конкретных запросах. И где вы увидели, что данные приходят из формы? :D

// Запрос
Database::query("INSERT INTO users VALUES(?,?,?,?,?)", "", "Name", "Surname", "Email", 1);

Параметры подставил я сам исключительно ради теста
Быстрый ответ:

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