|
|
|
| Добрый день.
Как рациональнее проверять существует ли записать в бд?
if(mysql_fetch_array(mysql_query("select id from user where mail='".$mail."'")))
exit(1);
else
exit(0);
|
Как видно тут приходится извлекать id да потом еще и сувать в mysql_fetch_array.
Есть ли более рациональные способы?
Спасибо. | |
|
|
|
|
|
|
|
для: ntro123
(17.04.2011 в 10:28)
| | В однотабличных запросах обычно использую функцию COUNT(*)
<?php
$query = "SELECT COUNT(*) FROM user
WHERE mail = '$mail'";
$cnt = mysql_query($query);
if(!$cnt) exit("Ошибка выполнения запроса - ".mysql_error()."<br>".$query);
if(mysql_result($cnt, 0)) exit(1);
else exit(0);
?>
|
PS Я бы не рекомендовал использовать вложенные конструкции без проверки правильности выполнения запроса. Они у вас выпьют массу крови, так как в случае возникновения ошибки (а они возникают регулярно по разным причинам и статический запрос не является панацеей), код будет вести себя так, как будто ничего не случилось возвращая 0 записей. Если вам важно осуществлять проверку в одну строку, то лучше оформить обертки для mysql-функций, в которые будут включены механизмы проверки и, например, генерации исключений, которые можно перехватывать во внешнем коде. В любом случае ни один запрос нельзя оставлять без обработки ошибок, так как среды PHP и MySQL разные и не могут друг друга предупреждать о возникших проблемах - это задача программиста. | |
|
|
|
|
|
|
|
для: cheops
(17.04.2011 в 10:39)
| | А разве не достаточно проверять при подключении к бд?
просто тот участок что я вам привел это проверка не занят ли email адрес другим пользователем и запрос осуществляется через ajax.
У меня проверяется только перед записью в бд и при подключении бд. | |
|
|
|
|
|
|
|
для: ntro123
(17.04.2011 в 11:14)
| | Лучше проверять всегда - получится быстрее разрабатывать и в конечном продукте будет меньше ошибок. Запрос может быть модифицирован, в запрос может попасть неэкранированная строка. Блок может пойти в качестве строительного модуля другой системы, где в силу причин не будет подключена база данных с нужной вам таблицей. Запрос отработает, сообщит, что записей 0, а о том, что произошла ошибка и модуль не рабочий вы не сможете узнать, считая, что блок отлажен и ошибок выдавать не может (а они постоянно возникают на стыках технологий, вроде PHP и MySQL). Впрочем, не обязательно это делать прямо сейчас, со временем вы сами все это увидите. Когда у вас засбоит отлаженный модуль или на причину поиска неисправности, о которой модуль молчит у вас уйдет больше часа, просто вспомните, что это можно предотвратить тотальной проверкой правильности выполнения запросов. | |
|
|
|
|
|
|
|
для: cheops
(17.04.2011 в 12:02)
| | У меня все строки проверяются регулярными выражениями, и уверен на 100% что в запросы попадет только то что мне нужно (это сделано и против sql inj).
Единственное чего я боюсь это того что сам сервер одаст мне не верные данные (различные сбою на сервере или в самой mysql).
Спасибо за дельные советы. | |
|
|
|