Я пытаюсь проверить, существует ли запись в базе данных, но когда я запускаю код ниже, все, что я получаю, это сообщение, подтверждающее соединение с базой данных. После разбора кода я не получаю ни одно из двух сообщений. Я новичок в PDO и пробовал всевозможные способы сделать эту работу, но не получаю никакого результата. Может ли кто-нибудь помочь?
<?php
$telephone= ($_GET [ 'telephone' ]);
try {
$dbh = new PDO("mysql:host=$hostname;dbname=gosdirect", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';
$sql = "SELECT COUNT(*) FROM directory WHERE telephone == $telephone";
if ($res = $dbh->query($sql)) {
/* Check the number of rows that match the SELECT statement */
if ($res->fetchColumn() > 0) {
echo 'The telephone number: ' . $telephone. ' is already in the database<br />';
}
/* No rows matched -- do something else */
else {
echo 'No rows matched the query.';
}
}
$res = null;
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
Несколько вещей. MySQL не использует оператор равенства ==
, вместо этого вы должны просто использовать =
. Кроме того, поскольку вы используете PDO, может быть лучше настроить подготовленные заявления.
Наконец, поскольку вы используете COUNT(*)
, ваш запрос всегда будет возвращать 1 запись. Вам необходимо обновить код следующим образом:
$sql = $dbh->prepare("SELECT COUNT(*) AS 'total' FROM directory WHERE telephone = :phone");
$sql->execute(array(':phone' => $telephone));
$result = $sql->fetchObject();
if ($result->total > 0)
{
echo 'The telephone number: ' . $telephone. ' is already in the database<br />';
}
else
{
echo 'No rows matched the query.';
}
Вероятно, стоит отметить, что, поскольку вы получаете $telephone
phone прямо из супергеостата $_GET
, вы не должны выводить его неанитированным в браузер (из-за уязвимостей XSS). Я бы рекомендовал обновить ваш первый echo
оператор следующим образом:
echo 'The telephone number: ' . strip_tags($telephone). ' is already in the database<br />';
Что-то вроде этого (без SQL-Injection;)):
$sql = 'SELECT COUNT(*) FROM directory WHERE telephone = :phone';
$stmt = $conn->prepare($sql);
$sth->bindParam(':phone', $_GET['telephone'], PDO::PARAM_STR, 12);
$stmt->execute();
if($stmt->fetchColumn()) die('found');
Нет необходимости в
$sql = "SELECT COUNT(*) FROM directory WHERE telephone == $telephone";
Должен быть
$sql = "SELECT COUNT(*) FROM directory WHERE telephone = $telephone";
Надеюсь, поможет