false, 'message' => 'No se proporcionó un identificador de producto.']; $pdo = db(); $product = null; // Handle search by SKU (barcode) if (isset($_GET['codigo_barras'])) { $sku = trim($_GET['codigo_barras']); if (!empty($sku)) { try { // Search by the 'sku' column $stmt = $pdo->prepare("SELECT id, nombre, sku FROM products WHERE sku = :sku"); $stmt->execute(['sku' => $sku]); $product = $stmt->fetch(PDO::FETCH_ASSOC); if (!$product) { $response['message'] = 'Producto no encontrado con el SKU/código de barras proporcionado.'; // Log the failed SKU attempt to a file $log_message = date('[Y-m-d H:i:s]') . " Intento fallido de búsqueda con SKU: " . $sku . PHP_EOL; file_put_contents('sku_failures.log', $log_message, FILE_APPEND); } } catch (PDOException $e) { // Don't expose detailed SQL errors to the client error_log('Database Error: ' . $e->getMessage()); $response['message'] = 'Error al consultar la base de datos.'; } } else { $response['message'] = 'El SKU/código de barras no puede estar vacío.'; } // Handle search by internal ID } elseif (isset($_GET['id'])) { $product_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT); if ($product_id) { try { $stmt = $pdo->prepare("SELECT id, nombre, sku FROM products WHERE id = :id"); $stmt->execute(['id' => $product_id]); $product = $stmt->fetch(PDO::FETCH_ASSOC); if (!$product) { $response['message'] = 'Producto no encontrado con el ID proporcionado.'; } } catch (PDOException $e) { error_log('Database Error: ' . $e->getMessage()); $response['message'] = 'Error al consultar la base de datos.'; } } else { $response['message'] = 'ID de producto inválido.'; } } if ($product) { $response = ['success' => true, 'product' => $product]; } echo json_encode($response); ?>