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;