2012-06-04 3 views
0

Я пытаюсь отобразить запись из базы данных MySql, которая выбирается данными GET.PHP не отображает результаты из базы данных MySQL

if (isset($_GET["id"])){ 

     $id=$_GET["id"]; 
     $result = getSelectedBlog($id); 

     while($row = mysqli_fetch_array($result)) 
      { 
       extract($row); 
       ?> 

        <div class="headline"><?php echo $headline ?></div> 
        <div class="subtitle"><?php echo $subTitle ?></div> 
        <div class="content"><?php echo $content ?></div> 
        <?php 
      } 

Вот SQL заявление:

function getSelectedBlog($id){ 

$con = mysqli_connect('localhost', 'root', '', 'michaelWebsite') or die('could not connect'); 
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "$id"'; 
$result = mysqli_query($con, $sql) or die('entry does not exist.:' . mysqli_error($con)); 
return $result; 

}

Как вы можете видеть, я передаю ГЭТ данные как $ ид к методу, который возвращает результат. Однако ничего не возвращается. На данный момент есть три записи, если я изменил $ id в выражении SQL на 1, 2 или 3, он отобразит соответствующие данные, но он просто не будет работать с переменной $ id.

URL-адрес заканчивается правильной информацией? Id = 1.

Прошу извинить меня, если это что-то глупое, я только что застрял на этом в течение нескольких часов!

+0

Попробуйте добавить 'var_dump ($ ID),' внутри функции посмотрим, что это. –

+0

У вас есть отверстие для инъекции SQL в вашем коде - прямо с помощью '$ _GET ['id']' в запросе. Прочитайте [this] (http://bobby-tables.com), прежде чем идти дальше с этим кодом. –

+0

Вы используете функции mysqli_ *, как если бы они были функциями mysql_ *. Попробуйте выйти из идентификатора $ id, ваш код уязвим для инъекции mysql ($ id поступает из $ _GET, не подвергается дезинфекции и не вставлен прямо в запрос. Погрузитесь в хороший учебник mysql/mysqli/pdo и mysql. для PDO и MySQL. Удачи. –

ответ

2

Все эти ответы помогут решить вашу проблему, но никто не упомянул или не предупредил SQL Injection.

В вашем случае я рекомендую (предполагается, что articleID - целое поле).

$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . (int)$id . '"'; 

Я также любопытно, почему вы используете LIKEдля идентификатора поля.

Примечание: Поскольку вы используете MySQLi, я бы посоветовал вам взглянуть на prepared statements.

1
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "'.$id.'"'; 

избежать ваш вар в простой цитатой

+0

Вам также следует избегать его из SQL Injection. В этом случае вы можете просто бросить его. –

+0

Ах, я был глуп, спасибо! –

+0

Да использовать mysql_real_escape_string() или класс DAO, например pdo – ke20

1

Попробуйте с этим:

$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'"; 

или с

$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . $id . '"'; 
0

Вы должны использовать двойные кавычки для того, чтобы PHP, чтобы правильно развернуть ваши переменные :), поэтому смените ваш запрос на

$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'"; 
0

Изменить

'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "$id"' 

в

"SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'" 

Переменные будут оцениваться только, если они двойные кавычки "

Смежные вопросы