MySql php: проверьте, существует ли строка
Это, наверное, легко сделать, но я любитель, и все просто не работает для меня.
Я просто хочу проверить и посмотреть, существует ли строка, где показано выражение $lectureName. Если строка существует с именем $lectureName где-то в ней, я хочу, чтобы функция возвращала "назначен", если нет, то она должна возвращать "доступную". Вот что у меня есть. Я уверен, что это беспорядок. Пожалуйста, помогите.
function checkLectureStatus($lectureName)
{
$con = connectvar();
mysql_select_db("mydatabase", $con);
$result = mysql_query("SELECT * FROM preditors_assigned WHERE lecture_name='$lectureName'");
while($row = mysql_fetch_array($result));
{
if (!$row[$lectureName] == $lectureName)
{
mysql_close($con);
return "Available";
}
else
{
mysql_close($con);
return "Assigned";
}
}
Когда я делаю это, все возвращается, даже если оно должно быть возвращено.
Ответы
Ответ 1
Это должно сделать трюк: просто ограничьте результат до 1 строки; если строка возвращается, $lectureName
присваивается, в противном случае она доступна.
function checkLectureStatus($lectureName)
{
$con = connectvar();
mysql_select_db("mydatabase", $con);
$result = mysql_query(
"SELECT * FROM preditors_assigned WHERE lecture_name='$lectureName' LIMIT 1");
if(mysql_fetch_array($result) !== false)
return 'Assigned';
return 'Available';
}
Ответ 2
Самый простой способ проверить, существует ли строка:
$lectureName = mysql_real_escape_string($lectureName); // SECURITY!
$result = mysql_query("SELECT 1 FROM preditors_assigned WHERE lecture_name='$lectureName' LIMIT 1");
if (mysql_fetch_row($result)) {
return 'Assigned';
} else {
return 'Available';
}
Не нужно связываться с массивами и именами полей.
Ответ 3
Используйте mysql_num_rows(), чтобы проверить, доступны ли строки или нет
$result = mysql_query("SELECT * FROM preditors_assigned WHERE lecture_name='$lectureName' LIMIT 1");
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
// do something
}
else {
// do something else
}
Ответ 4
Просто небольшое обновление для сообщения и ответов:
mysqli_query следует использовать, а не mysql_query.
mysqli_query
Ответ 5
$result = mysql_query("select if(exists (SELECT * FROM preditors_assigned WHERE lecture_name='$lectureName'),'Assigned', 'Available')");
Ответ 6
Если вы хотите сравнить только одну строку с $lactureName, используйте следующую
function checkLectureStatus($lectureName)
{
$con = connectvar();
mysql_select_db("mydatabase", $con);
$result = mysql_query("SELECT * FROM preditors_assigned WHERE lecture_name='$lectureName'");
if(mysql_num_rows($result) > 0)
{
mysql_close($con);
return "Assigned";
}
else
{
mysql_close($con);
return "Available";
}
}
Ответ 7
function checkLectureStatus($lectureName) {
global $con;
$lectureName = mysql_real_escape_string($lectureName);
$sql = "SELECT 1 FROM preditors_assigned WHERE lecture_name='$lectureName'";
$result = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
if (mysql_fetch_row($result)) {
return 'Assigned';
}
return 'Available';
}
однако вам нужно использовать некоторую библиотеку абстракции для доступа к базе данных.
код станет
function checkLectureStatus($lectureName) {
$res = db::getOne("SELECT 1 FROM preditors_assigned WHERE lecture_name=?",$lectureName);
if($res) {
return 'Assigned';
}
return 'Available';
}