проверить, существует ли запись (PDO)

0

Я пытаюсь проверить, существует ли запись в базе данных, но когда я запускаю код ниже, все, что я получаю, это сообщение, подтверждающее соединение с базой данных. После разбора кода я не получаю ни одно из двух сообщений. Я новичок в 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();
  }
?>
Теги:
pdo

3 ответа

6
Лучший ответ

Несколько вещей. 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 />';
  • 0
    Большое спасибо @BenM. Это работает отлично. Это смотрело мне в лицо, но я не мог видеть это - лол
  • 0
    @ С тобой не проблема; Рад, что смог помочь!
1

Что-то вроде этого (без 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');
1

Нет необходимости в

$sql = "SELECT COUNT(*) FROM directory WHERE telephone == $telephone"; 

Должен быть

$sql = "SELECT COUNT(*) FROM directory WHERE telephone = $telephone";

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

  • 0
    Спасибо, но результат точно такой же. Я понял, что сингл = в начале, и попытка == была одной из альтернатив, которые не имели значения. Большое спасибо
  • 2
    Я разочарован, что кто-то, кажется, думает, что мой вопрос не показал никаких усилий по исследованию и отметил это как минус. Я пытался сделать это в течение двух дней и исследовал много ответов на многих форумах, а также пролистывал главы в разных книгах, но все еще безрезультатно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню