Dividir columna mediante consulta para insertar extracto en otra columna. No funciona

trabajando para siempre tratando de resolver mi secuencia de comandos para extraer los cinco caracteres del medio de la columna "part_no" e insertar los datos en la columna "núcleo" (varchar). El formato siempre es "000-00000-00".

Ejecuto este script como parte de mi script completo para crear un nuevo registro.

El script no tiene errores, pero no se inserta en cartons_current.

Muy frustrado.

Cualquier ayuda sería apreciada.

Se crea el registro, pero la columna central está en blanco.

enter image description here

 <?
 $host     = "XXXXXXX";
 $username = "XXXXXXX";
 $password = "XXXXXXX";
 $db_name  = "XXXXXXX";
 $tbl_name = "cartons_current";

 mysql_connect("$host", "$username", "$password") or die("cannot connect");
 mysql_select_db("$db_name") or die("cannot select DB");

 date_default_timezone_set('America/Los_Angeles');
 $date = date("m/d/y g:i A");
 $order = "INSERT INTO cartons_current (orig_time, type, part_no, description, artwork, min, max, qty)
        VALUES
        ('$date','$_POST[type]', '$_POST[part_no]', '$_POST[description]',       '$_POST[artwork]', '$_POST[min]', '$_POST[max]', '$_POST[qty]')";




 $result = mysql_query($order);

 $query2 = "select part_no from cartons_current";
 $sel = mysql_query($query2);
 while($row = mysql_fetch_row($sel)) {
 $core_digits = explode('-',$row[0]);
 $core =$core_digits[1];
 $query3 = "insert  into cartons_current(core) values('$core')";
 $sel2 = mysql_query($query3);
 }



 if ($result) {


 $part_no = $_REQUEST['part_no'] ;

 header("location: inv_fc_new_success.php?part_no=" . urlencode($part_no));
 }
 else {
  header("location: inv_fc_new_fail.php");
 }
 ?>

preguntado el 11 de junio de 12 a las 19:06

cuantos registros tiene $sel ¿Contiene? -

Supongo que te refieres a que no se inserta en cartons_current? -

@Jeremy Tienes razón -

Se crea el registro, pero la columna central está en blanco. -

2 Respuestas

Si está intentando insertar valores en esa columna para filas ya existentes, debe usar ACTUALIZAR. Puedes hacerlo en una consulta:

UPDATE cartons_current
SET core = SUBSTR(part_no, 5, 5)

Edit: Está bien, está tratando de insertar un nuevo registro y necesita el valor central extraído:

$core = substr($_POST['part_no'], 5, 5);
$type = mysql_real_escape_string($_POST['type']);
$part_no = mysql_real_escape_string($_POST['part_no']);
$description = mysql_real_escape_string($_POST['description']);
$artwork = mysql_real_escape_string($_POST['artwork']);
$min = mysql_real_escape_string($_POST['min']);
$max = mysql_real_escape_string($_POST['max']);
$qty = mysql_real_escape_string($_POST['qty']);
$order = "
    INSERT INTO cartons_current
    (
        orig_time,
        type,
        part_no,
        description,
        artwork,
        min,
        max,
        qty,
        core
    )
    VALUES
    (
        '$date',
        '$type',
        '$part_no',
        '$description',
        '$artwork',
        $min,
        $max,
        $qty,
        '$core'
    )";

$result = mysql_query($order);

Siempre escapar su entrada si está utilizando el obsoleto mysql_* funciones... pero mucho mejor aún, usa PDO y declaraciones preparadas para interactuar con su base de datos.

Respondido el 11 de junio de 12 a las 20:06

Estoy ejecutando este script en el momento en que el cliente crea un nuevo registro con un nuevo número de pieza (part_no) - Erik

Todo esto es del lado del cliente. Actualicé la pregunta con todo el guión. Este realmente me dejó perplejo. - Erik

En PHP, puede usar $core = substr($_POST['part_no'], 5, 5) e insértelo en la misma consulta que usa para insertar la fila. Además, la forma en que tiene configurado su script lo hace completamente abierto al ataque de inyección SQL. Considere usar PDO y su apoyo para declaraciones preparadas. - Zane Bien

¡Sin un lugar que actualizará todas las filas con el mismo valor! - somnath

@somnath, no, no lo hará. Actualizará la columna con el substr del valor part_no respectivo de cada fila. - Zane Bien

Trata explotar(). dividir() es .

$query2 = "select part_no from cartons_current";
$sel = mysql_query($query2);
while($row = mysql_fetch_row($sel)) {
 $core_digits = explode('-',$row[0]);
 $core =$core_digits[1];
 $query3 = "insert  into cartons_current(core) values('$core')";
 $sel2 = mysql_query($query3);
}

Respondido el 11 de junio de 12 a las 19:06

Intenté su sugerencia, pero todavía no veo nada en la columna principal. Nuevamente, el script crea un nuevo registro, pero la columna central aún se deja en blanco. La columna es varchar en el límite de 20. No puedo entenderlo. Actualicé la pregunta con todo el guión. - Erik

¿Debo mover esta consulta arriba de query1? - Erik

¿Puede verificar que no sea nulo para ninguna de las otras columnas de la tabla? Usted está inserting dentro core solo pero podría ser que alguna otra columna no sea nula y, como tal, la inserción esté fallando. Intente llamar a mysql_error() y verifique si surge algo. php.net/manual/en/function.mysql-error.php - somnath

La casilla nula no está marcada para ninguno de estos campos. - Erik

Estoy tratando de crear una nueva fila y extraer de "part_no" para insertarla en "core". Agradezco su seguimiento. Realmente perplejo en este. - Erik

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.