mysql - Error al concatenar datos en php - Stack Overflow en español
Error al concatenar datos en php
En el siguiente código, es un insert a la tabla inventory_list, este funciona perfectamente, tengo sus parámetros... como observación, en la tabla tengo el campo registerDate, el cual no lo pongo como parámetro ya que sera tomado del sistema.
Bueno lo que necesito hacer es como obtener el numFile(id autoincrementable) que se acaba de registrar, ya que con este formare un folio en base a una palabra, numFile y año, el cual debe quedar así: EST-0013-19. Este se pondrá en el campo folio de la tabla.
Haciendo prueba en postman el insert de los otros datos lo hace correctamente, haciendo un echo($update); del query de update, genera un 0 (cero) el cual se ingresa en el campo de folio y sale el siguiente error:
Warning: A non-numeric value encountered in C:\xampp\htdocs\WareHouse\apis\article.php on line 551
{"status":"0","errorMessage":"ITEM registrado"}
Ejecutando el mismo pedazo de código en el sql de PhpMyAdmin, si hace al actualización, y el campo se llena con los respectivo datos, que mencione arriba.
UPDATE inventory_list SET folio =
( SELECT x.max FROM ( SELECT CONCAT('EST-00',MAX(numFile),"-",YEAR(CURDATE()))max FROM inventory_list ) x );
Entonces creo mi problema es como lo estoy aplicando en el codigo PHP, tal vez no estoy mandando bien el dato al campo o me falta algo mas pero no se que es... Alguien pudiera ayudarme?
else if(isset($_POST['description_item']) && isset($_POST['price_item'])
&& isset($_POST['manufacturer']) && isset($_POST['model_item']) && isset($_POST['reorder_Level'])
&& isset($_POST['target_Stock']) && isset($_POST['imageName']) && isset($_POST['commentt'])
&& isset($_POST['fkEngineer']) && isset($_POST['fkCategory']) && isset($_POST['fkLocation'])
&& isset($_POST['fkSupplier']) && isset($_POST['fkUnit'])&& isset($_POST['fkSubCat']))
//$pdo->lastInsertId();
$query = 'INSERT INTO inventory_list (folio,description_item,price_item,manufacturer,model_item,
reorder_Level,target_Stock,image,registerDate,commentt,fkEngineer,fkCategory,fkLocation,fkSupplier,fkUnit,fkSubCat)
VALUES (?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);';
$update="UPDATE inventory_list SET folio = ( SELECT x.max FROM ( SELECT CONCAT('EST-00',MAX(numFile),"-",YEAR(CURDATE()))max FROM inventory_list ) x )";
$result = $connection->executeNonQuery($query,array($update,$_POST['description_item'], $_POST['price_item'] ,
$_POST['manufacturer'], $_POST['model_item'], $_POST['reorder_Level'], $_POST['target_Stock'], $_POST['imageName'],
$hoy, $_POST['commentt'] ,$_POST['fkEngineer'],$_POST['fkCategory'],$_POST['fkLocation'],$_POST['fkSupplier'],$_POST['fkUnit'],$_POST['fkSubCat']));
// $update="UPDATE inventory_list SET folio = ( SELECT x.max FROM ( SELECT CONCAT('EST-00',MAX(numFile),"-",YEAR(CURDATE()))max FROM inventory_list ) x )";
'errorMessage' => 'ITEM registrado'
'errorMessage' => 'ITEM no registrado'
Nota: Como el caso de la fecha, el parámetro folio, no lo puse ya que creo que sera creado automáticamente, si lo pusiera tendría que ponerlo yo, y eso no es lo que necesito.
He pensado en hacer, que después de insertar obtenga el numFile y haga todo lo anterior mencionado,y poner el código después de if ($result > 0) pero me falta una linea para que ingrese a la columna folio
editada el 24 ene. 19 a las 3:59
formulada el 18 ene. 19 a las 19:29
88033 medallas de plata2020 medallas de bronce
Intenta reacomodando las comillas simple y las comillas dobles, prueba de esta forma a ver como te va: $addFolio = "UPDATE inventory_list SET folio = 'EST"."-"."00".$saveDate."-".$year."'"; – Orlando De La Rosa el 18 ene. 19 a las 19:39
$saveDate es el resultado de una query, tienes que coger el valor dentro del resultado para el update no esa variable – Carmen el 18 ene. 19 a las 19:52
Como dice @Carmen: "$saveDate es el resultado de una query" por lo que debes de obtener el valor del id dentro del resultado. tbn los nombres de las variables no tienen ningun nombre significativo con lo que haces, es como si ubieras copiado y pegado el codigo y empezaste a editarlo. Creo que debes de reorganizar el codigo por que el select y el insert como que no tienen mucho sentidos (no veo donde usas el WHERE) al menos que tengas pensado afectar a todos los registro de la tabla. – Orlando De La Rosa el 18 ene. 19 a las 20:09
Cómo se ha dicho, no estás recuperando el dato que te trae el SELECT, aunque puedes optimizar tu código escribiendo solamente la consulta UPDATE, poniendo el SELECT como una sub-consulta. – A. Cedano el 18 ene. 19 a las 21:18
La actualización que quieres se puede lograr mediante una sola consulta. Por ejemplo si estás usando MySQL, sería: UPDATE inventory_list SET folio = ( SELECT x.max FROM ( SELECT CONCAT('EST-00',MAX(numFile),"-",YEAR(CURDATE())) max FROM inventory_list ) x ); Aquí, mediante YEAR(CURDATE()) obtendrías el año de la fecha actual. Con CONCAT concatenas los otros valores. La sub-consulta obtendría el valor deseado y se haría la actualización. En otros manejadores sería casi igual. – A. Cedano el 18 ene. 19 a las 23:34
$queryDate = "SELECT  max(numFile) as max from inventory_list";
$saveDate = $connection->executeQuery($queryDate,array($_POST['numFile']));
Te devuelve un array asi:
si deseas obtener el número debes llamar el campo max en $saveDate, así:
$addFolio = "UPDATE inventory_list SET folio = 'EST-00'".$saveDate['max']."-".$year;
Nota El último id insertado lo puedes obtener sin tener que hacer un select así:
$ultimoId = mysqli_insert_id($connetion);
y en el query pones
$addFolio = "UPDATE inventory_list SET folio = 'EST-00'".$ultimoId."-".$year;
respondida el 18 ene. 19 a las 20:14
Concatenar cadena en php
Concatenar variable php
error al concatenar javascript y php