0

私のpart_no列の形式は次のとおりです 000-00000-00。すべてのレコード。

レコードを作成するときに、中央の 5 文字を抽出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 IGNOREかを使用してくださいON DUPLICATE KEY UPDATE

于 2012-06-11T00:48:53.463 に答える
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 にあると思います。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'] . '\'');
}

SQL インジェクションを防ぐために、投稿されたデータをエスケープする getValue 関数を追加しました。

于 2012-06-11T18:26:20.000 に答える
0

これを削除してみてください

$res = mysql_result($sel);

whileメインクエリリソースを参照するように変更します

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

ただし、テーブルのロジックがわかりません。テーブルにデータを挿入していcartons_addedますが、次から選択していcartons_currentますか?

また、splitPHP 5.3.0 で廃止されました。

于 2012-06-11T00:42:47.327 に答える
0

あなたは5つの中間の「文字」を言ったので、次のように変数の周りに引用符を追加します:

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

(また、SQLインジェクションとpdoの使用に関するSOの回答は数十兆しかありません)

于 2012-06-11T00:43:01.677 に答える