Я очень новичок в использовании MySQL с PHP, и вот что я нашел в Интернете, чтобы получить мои результаты:
$con = mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("Cannot connect to the database");
$query = "SELECT ... FROM ... WHERE ID=5";
$result = mysql_query($query);
$num = mysql_num_rows($result);
if ($num > 0 ) {
// do stuff
} else {
// inform user
}
mysql_close($con);
ID
- это автоматически сгенерированный ненулевой первичный ключ моей таблицы. сейчас у меня в таблице 20 записей. если я введу ID
значение, соответствующее любой из этих существующих записей, все будет хорошо и работает как задумано.
однако, если я введу значение ID
, скажем, 54 или что-либо, что не соответствует ни одной из моих существующих 20 записей (то есть не существует строки с таким ID
), я ожидаю $num <= 0
и мой условный оператор перейдет в блок else
. но я обнаружил, что это не так - он все еще идет в ветку TRUE
и переходит к блоку // do stuff
, поэтому я запустил запрос на phpmyadmin и обнаружил, что получаю ровно 1 строку с NULL
во всех областях. вот почему $num
возвращал 1
, то есть >0
.
вопросы:
- как правильно проверить несуществующие строки? так что остальная часть моего скрипта будет работать, только если я получу строку, содержащую данные.
- я обнаружил
mysql_store_result
и mysql_free_result
во время исследования этого онлайн, но недостаточно информации, чтобы заставить их работать должным образом. например, где в моем коде я их размещаю, почему я могу делать то, что мне нужно, прямо сейчас в php, даже без них и т. д.?
- какие-нибудь "лучшие практики", которые мне здесь не хватает, когда дело касается баз данных mysql в php?
- когда мне нужно вызвать несколько SQL-операторов, я перебираю
$query
- $result
- $num
процесс до того, как я mysql_close
подключусь. это "лучшая практика"?
Большое спасибо, ребята, вы все великолепны.
ОБНОВЛЕНИЕ: Включая весь запрос
SELECT Dyna,
Floater,
Can.Label as CanLabel,
GROUP_CONCAT(DISTINCT Vanity.Name SEPARATOR ', ') as VanityName,
GROUP_CONCAT(DISTINCT Univ SEPARATOR ', ') as Univ,
ShopDate,
ManuDate,
FlipTran,
Remarks,
Bib,
Abbrev,
ShopChar,
Comment,
Value,
ERUSD
FROM
(Vanity INNER JOIN ((Vanity INNER JOIN Shoppy ON Vanity.VanityID = Shoppy.VanityID) INNER JOIN ShoppyVanity ON Shoppy.ID = ShoppyVanity.ID) ON Vanity.MethodID = ShoppyVanity.MethodID) INNER JOIN UAC ON (Shoppy.VanityID = UAC.VanityID) AND (Vanity.VanityID = UAC.VanityID)
WHERE (((Shoppy.ID)=5))