2014-11-11 6 views
-1

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

ответ

5

Несколько вещей. 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 прямой от $_GET супер-глобальный, вы должны на самом деле не выводить его unsanitized в браузере (по причинам, уязвимостей XSS). Я рекомендовал бы обновить свой первый echo заявление следующим образом:

echo 'The telephone number: ' . strip_tags($telephone). ' is already in the database<br />'; 
+0

Большое спасибо @BenM. Это работает отлично. Он смотрел мне в лицо, но я не мог этого видеть - lol – Togfather

+0

@Togfather не проблема; Рад, что смог помочь! – BenM

1

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

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

Это должно быть

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

Надеется, что это помогает

+0

Спасибо, но результат такой же. Я проиграл сингл = в начале и попытался использовать один из альтернатив, который не имел никакого значения. Большое спасибо – Togfather

+2

Я разочарован тем, что кто-то кажется, что мой вопрос не показал никаких исследований и отметил его как минус. Я пытался сделать это в течение двух дней и много исследовал множество ответов на многих форумах, а также просматривал главы в разных книгах, но до сих пор безуспешно. – Togfather

+0

Лучше упомянуть о ваших усилиях в вопросе. Чтобы люди могли помочь вам без проблем. –

1

Что-то вроде этого (без SQL-инъекций;)):

$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'); 
Смежные вопросы