I have been searching online for hours trying to find the bug in my code that is throwing this error. The goal of the script is to create/edit the five price levels for every product in our database, based on the formulas that are shown in the code below.
PHP Fatal error: Uncaught TypeError: mysqli::real_escape_string(): Argument #1 ($string) must be of type string, mysqli_result given in /var/www/html/pricecheck.php:96
Stack trace:
#0 [internal function]: mysqli->real_escape_string()
#1 /var/www/html/pricecheck.php(96): array_map()
#2 {main}
thrown in /var/www/html/pricecheck.php on line 96
My PHP code is as follows:
<?php
set_time_limit(0);
error_reporting(E_ALL ^ E_DEPRECATED ^ E_NOTICE);
include 'conn_dev.php';
$products = array();
$query = "select rowid, price, price_min, cost_price FROM $table_products WHERE price > 0 AND cost_price > 0";
$result = mysqli_query($conn, $query) or trigger_error("Product Query Failed! SQL: $query - Error: ".mysqli_error($conn), E_USER_ERROR);
$howmany = mysqli_num_rows($result);
if ($howmany > 0) {
while ($row = mysqli_fetch_array($result)) {
$rowid = $row['rowid'];
$price = $row['price'];
$price_min = $row['price_min'];
$cost_price = $row['cost_price'];
$products[$rowid] = array(
'price' => $price,
'price_min' => $price_min,
'cost_price' => $cost_price
);
$query_latest = "SELECT MAX(date_price) FROM $table_product_prices WHERE `fk_product` = $rowid AND `price_level` = 1";
$date_price = mysqli_query($conn, $query_latest) or trigger_error("L1 Date Query failed! SQL: $query - Error: ".mysqli_error($conn), E_USER_ERROR);
$product_id = $rowid;
for ($i = 1; $i < 6; $i++) {
if ($i == 1) {
$level_price = $price;
$level_price_min = $cost_price;
} else if ($i == 2) {
$level_price = round($cost_price * 1.1,2);
$level_price_min = round($cost_price * 1.1,2);
} else if ($i == 3) {
$level_price = $price;
$level_price_min = round($cost_price * 1.1,2);
} else if ($i == 4) {
$level_price = round($price * 0.9,2);
$level_price_min = $cost_price * 1.1;
if ($level_price < $level_price_min) $level_price = $level_price_min;
} else if ($i == 5) {
$level_price = round((($price - $cost_price) * 0.5) + $cost_price,2);
$level_price_min = round($cost_price * 1.1,2);
if ($level_price < $level_price_min) $level_price = $level_price_min;
}
$price_ttc = round($level_price * 1.055,2);
$price_ttc_min = round($level_price_min * 1.055,2);
$sql_data_array = array();
$sql_data_array['entity'] = 1;
$sql_data_array['tms'] = $date_price;
$sql_data_array['fk_product'] = $product_id;
$sql_data_array['date_price'] = $date_price;
$sql_data_array['price_level'] = $i;
$sql_data_array['price'] = number_format($level_price, 8, '.', '');
$sql_data_array['price_ttc'] = number_format($price_ttc, 8, '.', '');
$sql_data_array['price_min'] = number_format($level_price_min, 8, '.', '');
$sql_data_array['price_min_ttc'] = number_format($price_ttc_min, 8, '.', '');
$sql_data_array['price_base_type'] = 'HT';
$sql_data_array['default_vat_code'] = '';
$sql_data_array['tva_tx'] = 5.5;
$sql_data_array['recuperableonly'] = 0;
$sql_data_array['localtax1_tx'] = 0;
$sql_data_array['localtax1_type'] = 0;
$sql_data_array['localtax2_tx'] = 0;
$sql_data_array['localtax2_type'] = 0;
$sql_data_array['fk_user_author'] = 2;
$sql_data_array['tosell'] = 1;
$sql_data_array['price_by_qty'] = 0;
$sql_data_array['import_key'] = 'testing';
$sql_data_array['multicurrency_code'] = '';
$sql_data_array['multicurrency_tx'] = 1;
$product_price_level_data = isset($product_prices[$i][$product_id]) ? $product_prices[$i][$product_id] : array();
if (isset($product_price_level_data['rowid'])) {
$rowid_level = $product_price_level_data['rowid'];
$sets = array();
foreach ($sql_data_array as $key => $value) {
$sets[]='`'.$key.'`=\''.addslashes($value).'\'';
}
$sqlquery='SET '.implode(', ',$sets);
$sql_i = "UPDATE $table_product_prices $sqlquery WHERE rowid='$rowid_level'";
$result_i = mysqli_query($conn, $sql_i) or trigger_error("Query Failed! SQL: $sql_i - Error: ".mysqli_error($conn), E_USER_ERROR);
} else {
$sql_i = sprintf('INSERT INTO %s (%s) VALUES ("%s") ', $table_product_prices, implode(', ', array_map(array($conn, 'real_escape_string'), array_keys($sql_data_array))), implode('", "',array_map(array($conn, 'real_escape_string'), $sql_data_array)));
$result_i = mysqli_query($conn, $sql_i) or trigger_error("Query Failed! SQL: $sql_i - Error: ".mysqli_error($conn), E_USER_ERROR);
}
}
}
}
I know that this is a very "specific" question, but I suspect that I am not the only one struggling with "real_escape_string()"s. Any advice on fixing this?