UPDATE на няколко реда и няколко колони от таблица

djidja83

Registered
Пробвам тази заявка

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "Graduation_thesis";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("За съжаление, MySQL връзката не може да бъде осъществена" . $conn->connect_error);
}
mysqli_set_charset($conn, 'utf8');
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1
UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id` = 2
UPDATE `mixed` SET `bid` = '0', `pqid` = '11', `qid` = '0' WHERE `mixed`.`id` = 3";
if ($conn->query($mysqli) === TRUE) {
echo "Данните са въведени успешно";
} else {
echo "Грешка при въвеждане на данните: " . $conn->error;
}
$conn->close();
?>

Но ми дава следната грешка

Грешка при въвеждане на данните: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id`' at line 2

Ако го направя така

$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1";
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id` = 2";
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '11', `qid` = '0' WHERE `mixed`.`id` = 3";

Променя само последния ред.

Четох много в интернет, пробвах различни варианти на заявката, но не се получава.

Идеи?

Благодаря!
 
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1";
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id` = 2";
$mysqli = "UPDATE `mixed` SET `bid` = '0', `pqid` = '11', `qid` = '0' WHERE `mixed`.`id` = 3";

Променя само последния ред.

Това е само присвояване на променлива. За да сработи, трябва Не да присвояваш, да Изпълниш командата mysqli_query:

PHP:
mysqli_query("UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1");
mysqli_query("UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id` = 2");
mysqli_query("UPDATE `mixed` SET `bid` = '0', `pqid` = '11', `qid` = '0' WHERE `mixed`.`id` = 3");

Алтернативата е да изпълниш заявките с едно извикване на mysqli_query, но тогава ще трябва да ги разделиш с ';'. В първоначалния ти опит си ги разделил с нови редове, но в mysql новите редове не означават нова команда - а трябва да използваш точка и запетая ';'.
 
Fakeheal каза:
Също така на mysqli_query трябва да подадеш връзката с базата данни като първи параметър.
Мерси за забележката, изобщо не обърнах внимание :D
Но като така и така ползва ObjectOriented API-to може да ги вика като методи.

PHP:
$conn->query("UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1");
// etc.
 
Вече ми е супер неудобно, но ... съжалявам. В крайна сметка докарах заявката до тук:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "Graduation_thesis";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("За съжаление, MySQL връзката не може да бъде осъществена" . $conn->connect_error);
}
mysqli_set_charset($conn, 'utf8');
$conn->query ("UPDATE `mixed` SET `bid` = '0', `pqid` = '4', `qid` = '0' WHERE `mixed`.`id` = 1");
$conn->query ("UPDATE `mixed` SET `bid` = '0', `pqid` = '10', `qid` = '0' WHERE `mixed`.`id` = 2");
$conn->query ("UPDATE `mixed` SET `bid` = '0', `pqid` = '11', `qid` = '0' WHERE `mixed`.`id` = 3");
if ($conn === TRUE) {
echo "Данните са въведени успешно";
} else {
echo "Грешка при въвеждане на данните: " . $conn->error;
}
$conn->close();
?>

При изпълнение изписва Грешка при въвеждане на данните, а всъщност, като вляза в phpMyAdmin данните са въведени коректно.
Къде се омазах пак?
Благодаря!
 
Ако обичаш слагай си кода в [php ] таговете, за да се чете по-лесно.

Иначе проверката, която правиш е грешна. Най-лесно можеш да правиш проверка с:

PHP:
if ( $conn->affected_rows !== -1 ) {
      echo "Всичко е наред";
}
else {
      // грешка в заявките
}


Но този подход не е много точен, защото или трябва след всяка заявка да я правиш и да изведеш една камара съобщения, или трябва да ги събираш някъде и да отчиташ дали всяка е минала, или може би най-правилното, ако искаш всички ЗАДЪЛЖИТЕЛНО да се изпълнят, да ги сложиш в транзакция.
 
PHP:
if ($conn === TRUE) {
echo "Данните са въведени успешно";
$conn е обект от тип mysqli, няма как да бъде === TRUE.


+ да подчертая за слагането на кода в съответните [phр]/[htmI]/... тагове.
 

Горе