Intereting Posts
Вызов ob_flush () и flush (), но браузер не показывает какой-либо вывод до завершения скрипта Создание файла PHP Создание каталога Что означает «массовое присвоение» в Ларавеле? как я могу удалить тестовый заказ от magento Проблема с получением данных из базы данных с помощью PHP MySQL PHP Как вы разрешаете клиентам регистрироваться на вашем сайте с помощью своей учетной записи Google? Определение языка браузера в PHP Календарь бронирования Прибытие и отъезд Используйте токен обновления OAuth для получения нового токена доступа – API Google Чат в реальном времени, обработка сообщений – Socket.io, PHP, MySQL, Apache Как я могу дезинформировать свои заявления о включении? Автоматическое определение текущего локального времени пользователя с помощью JavaScript или PHP Как отправить сообщение от WhatsApp в PHP с помощью WhatsAPI Official? laravel как обновить поле в базе данных POST Дополнительные значения

Попытка извлечь 5 символов из столбца при добавлении записи mysql через php

part_no имеет следующий формат: 000-00000-00 для всех записей.

Мне нужно извлечь пять средних символов из part_no и поместить их в core столбец при создании записи.

Я не могу заставить свой скрипт работать.

Я не получаю никаких ошибок. Просто не работает.

 $order = "INSERT INTO cartons_added (add_time, type, part_no, add_type, add_qty, add_ref, add_by, add_notes) VALUES ('$date', '$_POST[type]', '$_POST[part_no]', '$_POST[add_type]', '$_POST[add_qty]', '$_POST[add_ref]', '$_POST[add_by]', '$_POST[add_notes]')"; $result = mysql_query($order); $query2 = "select part_no from cartons_current"; $sel = mysql_query($query2); $res = mysql_result($sel); while($row = mysql_fetch_row($res)) { $core_digits = split('-',$row[0]); $core =$core_digits[1]; $query3 = "insert into cartons_current(core) values($core)"; $sel2 = mysql_query($query3); } 

Вы правы, сценарий не имеет ошибки.

Я думаю, что проблема заключается в вашем SQL, который заставил вас не вставлять новую строку, особенно в структуру таблицы. Возможно, вы определили PRIMARY KEY без AUTO_INCREMENT , определили ключ INDEX или UNIQUE который не является core ключом, или есть другой ключ, который не имеет значения по умолчанию. Помните, что вы не можете вставить строку без определения всего необходимого поля.

Вы, скрипт, выбираете все part_no и для каждого part_no вы вставляете новую строку в ту же таблицу, поэтому, возможно, есть проблема.

Я думаю, что вы хотите обновить каждый результат, чтобы добавить их core ценность, вы можете сделать это с помощью UPDATE качестве этого кода:

 function getValue($value) { return "'" . trim(mysql_real_escape_string($value)) . "'"; } mysql_query('INSERT INTO `cartons_added` (`add_time`, `type`, `part_no`, `add_type`, `add_qty`, `add_ref`, `add_by`, `add_notes`) VALUES (' . getValue($date) . ', ' . getValue($_POST[type]) . ', ' . getValue($_POST[part_no]) . ', ' . getValue($_POST[add_type]) . ', ' . getValue($_POST[add_qty]) . ', ' . getValue($_POST[add_ref]) . ', ' . getValue($_POST[add_by]) . ', ' . getValue($_POST[add_notes]) . ')'); $partNoQuery = mysql_query('SELECT `part_no` FROM `cartons_current`'); while($partNoResult = mysql_fetch_assoc($partNoQuery)) { list($prefix, $core, $suffix) = explode('-', $partNoResult['part_no']); mysql_query('UPDATE cartons_current SET `core` = \'' . $core . '\' WHERE `part_no` = \'' . $partNoResult['part_no'] . '\''); } 

Я добавил функцию getValue, чтобы избежать опубликованных данных, чтобы предотвратить SQL-инъекцию.

Вы можете обновить таблицу cartons_current на основе вашей таблицы cartons_added с чем-то вроде:

 INSERT INTO cartons_current(core) SELECT SUBSTR(part_no, 5, 5) FROM cartons_added 

Вероятно, вы захотите ограничить это WHERE или, возможно, иметь дело с тем, что происходит, когда это значение уже находится в cartons_current (используйте либо INSERT IGNORE либо ON DUPLICATE KEY UPDATE )

Попробуйте удалить это

 $res = mysql_result($sel); 

И измените свое while чтобы ссылаться на основной ресурс запроса

 while($row = mysql_fetch_row($sel)) { 

Однако я не понимаю вашу логику с вашими таблицами. Вы вставляете данные в таблицу cartons_added но затем вы выбираете из cartons_current ?

Кроме того, split устарел с PHP 5.3.0

Вы сказали пять средних «персонажей», поэтому я бы добавил цитаты вокруг вашей переменной так:

 $query3 = "insert into cartons_current(core) values('$core')"; 

(Кроме того, есть только около gazillion ответы на SO о SQL-инъекции и использование pdo)

 INSERT INTO cartons_current(core) SELECT substr(part_no,position('-' IN part_no)+1,position('-' IN substr(part_no,position('-' IN part_no)+1))-1) FROM cartons_added;