#php #mysql
#php #mysql — сервер #mysql
Вопрос:
Я запускаю запрос MySQL несколько раз, чтобы ВЫБРАТЬ и ОБНОВИТЬ несколько строк одновременно, но я сталкиваюсь с некоторой проблемой, связанной с сохранением нескольких результатов в переменной для доступа к ее значениям.
Вот мой код для запроса:
if(isset($_POST['transfer'])){
$code = $_SESSION['item_codes']; // $_SESSION['item_codes'] contains selected items to update.
// foreach($code as $prd){echo $prd;} exit();
if($code == ""){
echo "<script type='text/javascript'>alert('Please select at least one item.');</script>";
}
// to get the id of product which satisfy the following condition
for ($i=0; $i < sizeof($code); $i ) {
$search_id = "SELECT products.id as p_id,products.code,
products.metal,products.category_id,
products.branch_id, products.weight, products.labour, products.price,
category.id as cat_id, category.category_name, branches.id as branch_id,
branches.name as branch_name FROM products JOIN category ON products.category_id = category.id
JOIN branches ON products.branch_id = branches.id
WHERE products.code = '$code[$i]' AND products.branch_id = '$branch'";
$search_id_res = mysqli_query($conn, $search_id);
} // for end
while($fetch = mysqli_fetch_array($search_id_res, MYSQLI_ASSOC)){
foreach($fetch as $item){
echo $item."</br>";
};
echo $prd_id = $fetch['p_id'];
echo $update = "UPDATE products SET branch_id = '$transfer_to_branch' WHERE id='$prd_id";
}
}
Цели:
- ОБНОВИТЕ branch_id обеих строк одновременно, чтобы изменить их местоположение.
Проблемы:
- в $fetch я получаю только одну строку в результате.
- цикл while не печатает запрос НА ОБНОВЛЕНИЕ 2 раза.
поскольку я узнаю, что это единственные ошибки, которые я вижу, их может быть больше.
Результат выполнения двух операторов echo в циклах while.
products
таблица базы данных
Пожалуйста, помогите мне, заранее спасибо.
Комментарии:
1. Вам действительно нужно выбирать все эти данные? Можно ли выполнить все обновление с помощью одного обновления SQL —
UPDATE products SET branch_id = '$transfer_to_branch' WHERE products.code = '$code[$i]' AND products.branch_id = '$branch'"
(преобразованного в подготовленную инструкцию)
Ответ №1:
Вам нужно вложить второй цикл внутрь первого.
Также лучше использовать подготовленные инструкции, а не заменять переменные в строках SQL.
if(isset($_POST['transfer'])){
$code = $_SESSION['item_codes']; // $_SESSION['item_codes'] contains selected items to update.
// foreach($code as $prd){echo $prd;} exit();
if($code == ""){
echo "<script type='text/javascript'>alert('Please select at least one item.');</script>";
}
$select_stmt = mysqli_prepare($conn, "SELECT products.id as p_id,products.code, products.metal,products.category_id,
products.branch_id, products.weight, products.labour, products.price,
category.id as cat_id, category.category_name, branches.id as branch_id,
branches.name as branch_name FROM products JOIN category ON products.category_id = category.id
JOIN branches ON products.branch_id = branches.id
WHERE products.code = ? AND products.branch_id = ?");
mysqli_stmt_bind_param($select_stmt, "ss", $cur_code, $branch);
$update_stmt = mysqli_prepare($conn, "UPDATE products SET branch_id = '$transfer_to_branch' WHERE id='$prd_id");
mysqli_stmt_bind_param($update_stmt, "ss", $transfer_to_branch, $prd_id);
// to get the id of product which satisfy the following condition
foreach ($code as $cur_code) {
mysqli_stmt_execute($select_stmt);
$search_id_res = mysqli_stmt_get_result($select_stmt);
while($fetch = mysqli_fetch_array($search_id_res, MYSQLI_ASSOC)){
foreach($fetch as $item){
echo $item."</br>";
};
echo $prd_id = $fetch['p_id'];
mysqli_stmt_execute($update_stmt);
}
} // for end
}
Комментарии:
1. спасибо @Barmar за вашу помощь, я новичок в PHP, поэтому мне нужно понять, что делает
stmt
функция, и я обязательно попробую это.