Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Странное поведение mysql_query()


Автор: NFL 17.7.2011, 15:10
Код

 $colors = array('black', 'white');
        if (!empty($_POST['color'])) {
            $color = $_POST['color'];
        }

        else
            $color = $colors[mt_rand(0, 1)];
        if ($color == 'white') {
            $white = $_SESSION['user_id'];
            $black = 0;
        }
        if ($color == 'black') {
            $black = $_SESSION['user_id'];
            $white = 0;
        }
        $cost = (int) $_POST['cost'];
        $time_start = date("Y-m-d H:i:s");
        $pawnWhiteFields = array('a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2');
        $pawnBlackFields = array('a7', 'b7', 'c7', 'd7', 'e7', 'f7', 'g7', 'h7');
        $rookWhiteFields = array('a1', 'h1');
        $rookBlackFields = array('a8', 'h8');
        $knightWhiteFields = array('b1', 'g1');
        $knightBlackFields = array('b8', 'g8');
        $bishopWhiteFields = array('c1', 'f1');
        $bishopBlackFields = array('c8', 'f8');
        mysql_query("INSERT INTO chess_games(white_player, black_player, time_start, cost) VALUES('$white', '$black', '$time_start', '$cost')");
        if (!mysql_error()) {
            $gameId = mysql_insert_id();
            $sql = '';
            $updated = date("Y-m-d H:i:s");
            for ($i = 0; $i < 8; $i++) {
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'p', 'white', '$pawnWhiteFields[$i]', '$updated');";
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'p', 'black', '$pawnBlackFields[$i]', '$updated');";
                //header("Location: index.php?gameid=".mysql_insert_id());
            }
            for ($i = 0; $i < 2; $i++) {
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'r', 'white', '$rookWhiteFields[$i]', '$updated');";
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'r', 'black', '$rookBlackFields[$i]', '$updated');";

                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'k', 'white', '$knightWhiteFields[$i]', '$updated');";
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'k', 'black', '$knightBlackFields[$i]', '$updated');";

                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'b', 'white', '$bishopWhiteFields[$i]', '$updated');";
                $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'b', 'black', '$bishopBlackFields[$i]', '$updated');";
            }
            $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'q', 'white', 'd1', '$updated');";
            $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'q', 'black', 'd8', '$updated');";

            $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'k', 'white', 'e1', '$updated');";
            $sql.= "INSERT INTO chess_positions(game_id, piece_type, piece_color, 
                piece_field, updated) VALUES ('$gameId', 'k', 'black', 'e8', '$updated');";


Есть такой вот кодик, который генерит SQL
При попытке mysql_query($sql) - вылетает ошибка синтаксиса SQL.
При попытке echo $sql; и скопировать это дело в phpmyadmin - все ок, все 32 строки вставляются в БД.

В чем может быть проблема?
(denwer3 windows)

Автор: DenNTRooT 17.7.2011, 17:36
mysql_query не может выполнять множество запросов одновременно т. е. только один запрос за раз прийдеться вам все все разделять на отдельные запросы. (сам недавно столкнулся с данной проблемой :( ) Или как вариант можете использовать расширение mysqli там есть функция mysqli_multi_query которая может выполнить множество запросов за один раз  

Автор: NFL 17.7.2011, 17:38
DenNTRooT, в принципе, я уже так и сделал. просто 32 запроса мне как то не особо нравятся smile 
насчет mysqli - надо будет взглянуть)

оно использует обычный синтаксис SQL?

Автор: DenNTRooT 17.7.2011, 17:53
Нет это объектно ориентированный вариант библиотеки mysql подробнее почитайте здесь http://www.codenet.ru/webmast/php/mysqli.php Скажу одно сразу придется весь код запросов к бд включая соединения переделывать

Автор: NFL 17.7.2011, 18:18
DenNTRooT, об этом я в курсе smile 
Я имел в виду синтаксис самого SQL)
Насколько я понял, он такой же как и для обычных mysql-функций)

Автор: DenNTRooT 17.7.2011, 18:44
Простите не понял вопроса smile 
Конечно сам SQL абсолютно такой же 

Автор: NFL 17.7.2011, 22:25
Кстати, в mysql я забыл о такой вещи как multilpe rows
INSERT INTO t1(f1, f2, f3) VALUES (v1, v2, v3), (v4, v5, v6), ...
 smile немножко пхп-скрипт поправить и вполне себе подходит под мою задачу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)