2016-11-10 3 views
1

У меня проблема с моим PHP-кодом. Проблема заключается в $_GET['id']. Как вы можете видеть, я выводит набор результатов пользователя, который соответствует идентификатору пользователя.Почему текст игнорируется Mysql?

Вопрос: почему я получаю тот же результат (набор результатов пользователя с идентификатором 1), когда я ввожу два разных значения на URL?

URL 1: URL 1

URL2: URL 2

Если не текст (randomtext) быть приняты во внимание, так как код, кажется, игнорировать его.

<?php 

    try { 
     $db = new PDO('mysql:host=127.0.0.1;dbname=ptp', 'root', 'root'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch (PDOException $e) { 

    } 
    $id = $_GET['id']; 
    $sql = "SELECT * FROM users WHERE id = :id"; 

    echo $id . '<br/>'; 

    $query = $db->prepare($sql); 

    $query->bindParam(':id', $id); 
    $query->execute(); 


     while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
      print_r($r); 
     } 

    ?> 
+0

Поместите 'var_dump ($ e-> getMessage());' в ваш 'catch' оператор –

+0

Я пробовал, но результат, который я получаю, не является ошибкой, а набором результатов 1! – phadam

+0

Оба из ваших примеров имеют идентификатор 1 –

ответ

1

Так же, как PHP, MySQL будет отбрасывать строку "1random" в целом 1. Поэтому, если ваше поле id является числом, запрос будет выглядеть как "SELECT * FROM users WHERE id = 1", даже если есть некоторый случайный текст после 1

просто попробуйте это в PHP: var_dump('1dfg' == 1) он вернет true. в MySQL это тоже самое.

Однако, если вы попытаетесь найти пользователя с id "dfg1", ничего не будет возвращено, потому что эту строку нельзя отличить как int.

+0

Спасибо, что объяснил мне много. Решение, с которым я иду, - это отличное целое! – phadam

+1

@phadam вы можете объяснить, зачем вы бросали? –

+0

Да, это хорошая практика для проверки данных, даже если код работает без проверки. если вы ожидаете int, принимайте только ints и не полагайтесь на автоматический тип перевода –