Поддержка для реализации функций в одном запросе - PullRequest
4 голосов
/ 22 июня 2011

Есть ли способ оптимизировать следующее для одного запроса?

$username=sanitize($_POST['username']);
$sql="SELECT * FROM $tbl_name WHERE username='$username' AND email='$email' AND amount='$donation_amount'";
$result=mysql_query($sql);
$num_rows = mysql_num_rows($result);

if($num_rows==1){
$sql1="UPDATE $tbl_name SET password='$new_password' WHERE username='$username' AND email='$email' AND amount='$donation_amount'";
$result1=mysql_query($sql1);
$num_rows1=mysql_affected_rows();

Ответы [ 2 ]

5 голосов
/ 22 июня 2011

Вы можете не указывать части SELECT и $num_rows.

Предложение UPDATE достаточно: записи, найденные в соответствии с вашим предикатом (т. Е. Условие WHERE), будут обновлены.как указано в предложении SET;если записи не найдены, таблица / relvar будет «как есть» (т.е. обновление не будет выполнено).

Надеюсь, это поможет.

2 голосов
/ 22 июня 2011

Вам не нужно проверять, существуют ли имя пользователя / адрес электронной почты / сумма в системе. Просто используйте $ num_rows1, чтобы определить, обновили ли вы запись в базе данных - это скажет вам, было ли совпадение или нет.

Однако, если имя пользователя, адрес электронной почты и количество недостаточно для обеспечения уникальной записи (т. Е. Существует вероятность того, что вы сопоставите более одной записи в базе данных), это не будет работать. В этом случае я бы порекомендовал найти набор полей, которые вместе представляют уникальный ключ, и убедиться, что вы проверяете их как часть обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...