PHP SQLITE INSERT не вставляет запись, так как запись уже существует, но нет знака или исключения для ее указания - PullRequest
0 голосов
/ 03 мая 2020

Относительно SQLite3 и следующего PHP кода,

Я ожидаю, что когда запись существует, я получаю исключение, чтобы знать, что произошел конфликт, и запись не была вставлена ​​в базу данных

На данный момент я не получаю исключения, и запись тоже не вставлена! (поскольку запись уже существует в базе данных)
Итак, как я могу знать, что запись не была вставлена, когда все выглядит нормально?

 public function addRecord($mStore_M4_DataClass)
        {
            try 
            {
                $sql = 'INSERT INTO M4(M4_M2,'
                                    . 'M4_M3,'
                                    . 'M4_Barcode,'
                                    . 'M4_Enable,'
                                    . 'M4_Name,'
                                    . 'M4_Price,'
                                    . 'M4_Discount,'
                                    . 'M4_Image1,'
                                    . 'M4_Image2,'
                                    . 'M4_Image3,'
                                    . 'M4_Image4,'
                                    . 'M4_Image5,'
                                    . 'M4_Image6,'
                                    . 'M4_Image7,'
                                    . 'M4_Image8,'
                                    . 'M4_Image9,'
                                    . 'M4_Image10,'
                                    . 'M4_A,'
                                    . 'M4_B,'
                                    . 'M4_C,'
                                    . 'M4_D,'
                                    . 'M4_E,'
                                    . 'M4_F,'
                                    . 'M4_G,'
                                    . 'M4_H,'
                                    . 'M4_I,'
                                    . 'M4_J) '
                        . 'VALUES(:M4_M2,'
                               . ':M4_M3,'
                               . ':M4_Barcode,'
                               . ':M4_Enable,'
                               . ':M4_Name,'
                               . ':M4_Price,'
                               . ':M4_Discount,'
                               . ':M4_Image1,'
                               . ':M4_Image2,'
                               . ':M4_Image3,'
                               . ':M4_Image4,'
                               . ':M4_Image5,'
                               . ':M4_Image6,'
                               . ':M4_Image7,'
                               . ':M4_Image8,'
                               . ':M4_Image9,'
                               . ':M4_Image10,'
                               . ':M4_A,'
                               . ':M4_B,'
                               . ':M4_C,'
                               . ':M4_D,'
                               . ':M4_E,'
                               . ':M4_F,'
                               . ':M4_G,'
                               . ':M4_H,'
                               . ':M4_I,'
                               . ':M4_J)';

                $stmt = $this->pdo->prepare($sql);
                $stmt->execute([
                    ':M4_M2'       => $mStore_M4_DataClass->getM4_M2      (),
                    ':M4_M3'       => $mStore_M4_DataClass->getM4_M3      (),
                    ':M4_Barcode'  => $mStore_M4_DataClass->getM4_Barcode (),
                    ':M4_Enable'   => $mStore_M4_DataClass->getM4_Enable  (),
                    ':M4_Name'     => $mStore_M4_DataClass->getM4_Name    (),
                    ':M4_Price'    => $mStore_M4_DataClass->getM4_Price   (),
                    ':M4_Discount' => $mStore_M4_DataClass->getM4_Discount(),
                    ':M4_Image1'   => $mStore_M4_DataClass->getM4_Image1  (),
                    ':M4_Image2'   => $mStore_M4_DataClass->getM4_Image2  (),
                    ':M4_Image3'   => $mStore_M4_DataClass->getM4_Image3  (),
                    ':M4_Image4'   => $mStore_M4_DataClass->getM4_Image4  (),
                    ':M4_Image5'   => $mStore_M4_DataClass->getM4_Image5  (),
                    ':M4_Image6'   => $mStore_M4_DataClass->getM4_Image6  (),
                    ':M4_Image7'   => $mStore_M4_DataClass->getM4_Image7  (),
                    ':M4_Image8'   => $mStore_M4_DataClass->getM4_Image8  (),
                    ':M4_Image9'   => $mStore_M4_DataClass->getM4_Image9  (),
                    ':M4_Image10'  => $mStore_M4_DataClass->getM4_Image10 (),
                    ':M4_A'        => $mStore_M4_DataClass->getM4_A       (),
                    ':M4_B'        => $mStore_M4_DataClass->getM4_B       (),
                    ':M4_C'        => $mStore_M4_DataClass->getM4_C       (),
                    ':M4_D'        => $mStore_M4_DataClass->getM4_D       (),
                    ':M4_E'        => $mStore_M4_DataClass->getM4_E       (),
                    ':M4_F'        => $mStore_M4_DataClass->getM4_F       (),
                    ':M4_G'        => $mStore_M4_DataClass->getM4_G       (),
                    ':M4_H'        => $mStore_M4_DataClass->getM4_H       (),
                    ':M4_I'        => $mStore_M4_DataClass->getM4_I       (),
                    ':M4_J'        => $mStore_M4_DataClass->getM4_J       (),
                ]);

                return TRUE;
            } 
            catch (\PDOException $e) 
            {
                return FALSE;
            }
        }

Если запись не существует, она вставляется и из этой функции возвращается ИСТИНА
Если запись уже существует, ИСТИНА возвращается снова!

И следующее код создать код таблицы:

public function createTable() {
            try 
            {
                $commands = [
                    'CREATE TABLE IF NOT EXISTS M4 (
                            id INTEGER PRIMARY KEY,
                            M4_M2       TEXT,
                            M4_M3       TEXT,
                            M4_Barcode  TEXT,
                            M4_Enable   TEXT,
                            M4_Name     TEXT,
                            M4_Price    TEXT,
                            M4_Discount TEXT,
                            M4_Image1   TEXT,
                            M4_Image2   TEXT,
                            M4_Image3   TEXT,
                            M4_Image4   TEXT,
                            M4_Image5   TEXT,
                            M4_Image6   TEXT,
                            M4_Image7   TEXT,
                            M4_Image8   TEXT,
                            M4_Image9   TEXT,
                            M4_Image10  TEXT,
                            M4_A        TEXT,
                            M4_B        TEXT,
                            M4_C        TEXT,
                            M4_D        TEXT,
                            M4_E        TEXT,
                            M4_F        TEXT,
                            M4_G        TEXT,
                            M4_H        TEXT,
                            M4_I        TEXT,
                            M4_J        TEXT
                            )',
                           'CREATE UNIQUE INDEX idx_positions_title ON M4 (M4_M2,M4_M3,M4_Barcode)'
                ];
                foreach ($commands as $command) {
                    $this->pdo->exec($command);
                }
                return TRUE;
            } 
            catch (\PDOException $e) 
            {
               return FALSE;   
            }
        }

1 Ответ

0 голосов
/ 04 мая 2020

Не генерирует исключение. От PDO :: exe c Вручную

Возвращаемые значения

PDO :: exe c () возвращает число строк, которые были изменены или удалены с помощью введенного вами оператора SQL. Если ни одна строка не была затронута, PDO :: exe c () возвращает 0.

Предупреждение

Эта функция может возвращать логическое значение FALSE, но также может возвращать не -Булевое значение, которое оценивается как ЛОЖЬ. Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Ошибка также обнаруживается путем опроса PDO :: errorCode и / или PDO :: errorInfo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...