0

我的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);
}
4

5 回答 5

1

您可以cartons_current根据您的cartons_added表格更新您的表格,例如:

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

您可能想用一个WHERE子句来限制它,或者处理当这个值已经存在时发生的事情cartons_current(使用INSERT IGNOREor ON DUPLICATE KEY UPDATE

于 2012-06-11T00:48:53.463 回答
0

尝试删除这个

$res = mysql_result($sel);

并更改您while以引用主要查询资源

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

不过,我不明白您对表格的逻辑。您正在将数据插入cartons_added表中,但随后您选择了cartons_current?

此外,split自 PHP 5.3.0 起已弃用

于 2012-06-11T00:42:47.327 回答
0

你说五个中间“字符”,所以我会在你的变量周围添加引号,如下所示:

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

(此外,关于 SQL 注入和使用 pdo 的 SO 上只有无数个答案)

于 2012-06-11T00:43:01.677 回答
0
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;
于 2012-06-11T00:45:54.003 回答
0

你是对的,脚本没有错误。

我认为问题出在您的 SQL 上,导致您无法插入新行,特别是在表结构上。也许您定义了 a PRIMARY KEYwithout AUTO_INCREMENT,定义了 a INDEXorUNIQUE不是键的core键,或者还有其他一些没有默认值的键。请记住,如果不定义所有必填字段,则无法插入行。

您的脚本正在选择所有您在同一个表中插入新行的part_nopart_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 注入。

于 2012-06-11T18:26:20.000 回答