У меня есть эти наборы записей, и я подделываю $ _POST между запросами, чтобы использовать значения из первого запроса, чтобы получить значения из второго запроса, таким образом, я получаю первую строку из многих, я пробовал цикл foreach между запросами и неудачей …
Как мне перебрать первые строки набора записей, сколько их возвращено? …. код:
$maxRows_rs_all_classes = 50;
$pageNum_rs_all_classes = 0;
if (isset($_GET['pageNum_rs_all_classes'])) {
$pageNum_rs_all_classes = $_GET['pageNum_rs_all_classes'];
}
$startRow_rs_all_classes = $pageNum_rs_all_classes * $maxRows_rs_all_classes;
mysql_select_db($database_conn_studiogear_mgr, $conn_studiogear_mgr);
$query_rs_all_classes = "SELECT sg_class_desc.class_image,
sg_class_desc.class_location,
sg_classes.class_name,
sg_class_desc.class_room,
sg_classes.class_cat1,
sg_classes.class_cat2,
sg_classes.class_cat3,
sg_classes.class_id
FROM sg_class_desc
INNER JOIN sg_classes
ON sg_class_desc.class_id = sg_classes.class_id";
$query_limit_rs_all_classes = sprintf("%s LIMIT %d, %d",
$query_rs_all_classes,
$startRow_rs_all_classes,
$maxRows_rs_all_classes);
$rs_all_classes = mysql_query($query_limit_rs_all_classes, $conn_studiogear_mgr)
or die (mysql_error());
$row_rs_all_classes = mysql_fetch_assoc($rs_all_classes);
if (isset($_GET['totalRows_rs_all_classes'])) {
$totalRows_rs_all_classes = $_GET['totalRows_rs_all_classes'];
} else {
$all_rs_all_classes = mysql_query($query_rs_all_classes, $conn_studiogear_mgr);
$totalRows_rs_all_classes = mysql_num_rows($all_rs_all_classes);
}
$totalPages_rs_all_classes = ceil($totalRows_rs_all_classes/$maxRows_rs_all_classes)-1;
$_POST['class_id'] = $row_rs_all_classes['class_id'];
//without the following loop I return the first row and the second query works for the first row
// start loop when I use this loop, "Array" is echoed out and next query does not run
$classes = $row_rs_all_classes['class_id']; // from recordset above
foreach ($classes as $value) {
$ArrayClasses[] = "".$value ."";
echo $ArrayClasses; //
}
// end loop
$colname_rs_gear = "-1";
if (isset($_POST['class_id'])) {
$colname_rs_gear = $_POST['class_id'];
}
mysql_select_db($database_conn_prestashop, $conn_prestashop);
$query_rs_gear = sprintf("SELECT ps_product_lang.name,
ps_product.id_product,
ps_product.price,
ps_product.reference,
ps_product_lang.description_short,
ps_product_lang.description,
ps_supplier.name,
sg_class_gear.class_gear_image,
sg_class_gear.class_gear_product_link
FROM ps_product
INNER JOIN ps_product_lang
ON ps_product.id_product = ps_product_lang.id_product
INNER JOIN ps_supplier
ON ps_product.id_supplier = ps_supplier.id_supplier
INNER JOIN sg_class_gear
ON sg_class_gear.class_gear_pid = ps_product.id_product
WHERE ps_product.id_product = sg_class_gear.class_gear_pid
AND sg_class_gear.class_id = %s",
GetSQLValueString($colname_rs_gear, "int"));
$rs_gear = mysql_query($query_rs_gear, $conn_prestashop) or die(mysql_error());
$row_rs_gear = mysql_fetch_assoc($rs_gear);
$totalRows_rs_gear = mysql_num_rows($rs_gear);
1) Вы уязвимы для SQL инъекций
2) Вы используете устаревшую библиотеку базы данных (mysql) и должны переключиться на mysqli или PDO
3) функции mysql_fetch _ * () возвращают НЕ ЗАМУЖЕМ строка данных из набора результатов. Поскольку вы не вызываете mysql_fetch_in в цикле для вашего начального запроса, вы всегда получаете только первый ряд результатов. Ваш код должен быть
$result = mysql_query($first_query_sql);
while($row = mysql_fetch_assoc($result)) {
$result2 = mysql_query($inner_query_sql);
while($row2 = ...) {
}
}
Других решений пока нет …