Member 13637584 Ответов: 1

Можете ли вы поместить оператор MYSQL внутри оператора IF PHP


Привет Что касается моего кода ниже - он не работает, однако то, что я хочу достичь, - это если "оператор", то эхо "что-то", а также обновление базы данных MYSQL?


Может ли кто-нибудь сказать мне, могут ли операторы MYSQL работать внутри оператора if или что здесь не так?

Что я уже пробовал:

<pre> while ($dbRow=$dbQuery->fetch(PDO::FETCH_ASSOC)) {
$points = $dbRow['Points'];
$pointsDeduction =-20;
 }


if($daysLeft == $End) {
		 $stmt = $conn->prepare("UPDATE `Profile` SET `Points` =  $pointsDeduct WHERE UserID= $UserID");
$dbQuery->execute();
	echo"A total of  - 20 points will be deducted</center></h4>";
}

1 Ответов

Рейтинг:
8

Patrice T

Цитата:
это не работает

Определить "не работает"
Цитата:
это не работает, однако то, что я хочу достичь, - это если "заявление", то эхо "что-то", а также обновление базы данных MYSQL?

Это именно то, что делает ваш код. если условие выполнено, оно обновляется и Эхо.
-----
Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
if($daysLeft == $End) {
	$stmt = $conn->prepare("UPDATE `Profile` SET `Points` =  $pointsDeduct WHERE UserID= $UserID");
	$dbQuery->execute();
	echo"A total of  - 20 points will be deducted</center></h4>";
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
-----
$stmt = $conn->prepare("UPDATE `Profile` SET `Points` =  $pointsDeduct WHERE UserID= $UserID");

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Member 13637584

Это не вычитание 20 баллов из пользователя в базе данных MYSQL. Я возьму на борт и другие ваши соображения, спасибо.

0x01AA

Обновление `профиль` набор `очки` = `точки` - $pointsDeduct где userId= $userId, которое

Patrice T

У тебя есть эхо ?

Member 13637584

Спасибо за это но все равно ничего не делает :(

0x01AA

И вы уверены, что запись с UserID = $UserID существует?

0x01AA

Есть сообщение об ошибке? Я не знаком с php/MySQL, для меня SQL должен быть без `:

Есть сообщение об ошибке? Я не знаком с php/MySQL, для меня SQL должен быть без `:

Я бы попробовал это сделать:
$параметр stmt = $dbh не-&ГТ;подготовить("обновить профиль набора очков = Очки - :pointsDeduct где userId= :ID пользователя");
$stmt->bindParam(':pointsDeduct', $pointsDeduct);
$stmt->bindParam(':UserID', $UserID);
$stmt->выполнить();

И не забывайте об обработке ошибок для более или менее каждой строки :)


Member 13637584

да, сейчас он работает, однако его добавление в базу данных MYSQL не вычитается? а моя ошибается?

0x01AA

Если вы добавляете, то ваш pointDeduct кажется уже отрицательным, и вы должны добавлять, а не вычитать его.

Member 13637584

но мне это нужно для вычитания? это тот самый :
$pointreduction=-20 часть неверна?

Member 13637584

если я поставлю -20 вместо $pointdeduction, это сработает, однако является ли это хорошей практикой?

0x01AA

Смотри:
100 + (-20) = 80
100 - (-20) = 120

хорошая практика: я бы сказал, что это скорее вопрос правильного наименования параметра (пожалуйста, позаботьтесь об этом сейчас, я не носитель английского языка)

1.) Вы называете параметр "дедукция" для меня, то дедукция должна быть положительной и SQL: .... Баллы= Баллы - $вычет

2.) я бы назвал параметр pointDelta и в зависимости от того, что вы хотите сделать (сложение/вычитание), дал бы параметру соответствующий знак. Тогда SQL будет выглядеть следующим образом: .... Очки= Очки + $pointDelta

Просто вижу, что вы из Великобритании, так что я уверен, что вы найдете правильное/хорошее имя для случая 2.) :-)


Member 13637584

да, теперь в этом есть смысл. Большое спасибо за вашу помощь.

0x01AA

Добро пожаловать. И в случае если вы довольны ответом я предлагаю принять его и возможно дать ему также 5 за хорошие советы касающиеся SQL инъекции ;)

Patrice T

Спасибо.
Я был немного занят, пока вы занимались деталями.

0x01AA

Все в порядке, я просто был/нахожусь занят просмотром хоккейного матча :)