2013-06-07 2 views
0

Я хотел бы получить контент из MySQL на основе URL. Например, покажите весь FAQ, если URL-адрес равен /index.php?Name=FAQ. Как я могу решить эту проблему?MySQL выборки ничего не возвращает

<?php 
require("configish.php"); 

mysql_connect("$hosty", "$uname", "$paswd") or die ("Cannot connect"); 
mysql_select_db("$dbnme") or die ("Cannot select database"); 

$url = $_GET['Name']; 
$sql="SELECT * FROM Pages WHERE Name='".$url."'"; 
$result=mysql_query($sql) or die(mysql_error()); 
mysql_close(); 

while($res = mysql_fetch_array($result)) { 
    echo $res->Content; 
} 
?> 

О, прежде чем вы говорите так, я в курсе mysql_ функций устареет в PHP 5.5 и выше, но я использую PHP 5.3.10 в данный момент.

+1

1) Что такое проблема? 2) Вы открыты для ** SQL INJECTION !!! ** 3) «Устаревший» означает «пожалуйста, не используйте для новых вещей сейчас»; это независимо от того, какую версию PHP вы используете * сейчас *. 4) Не делайте '' $ var '', просто '$ var' будет отлично. – deceze

+0

Возможный дубликат [Как получить полезные сообщения об ошибках в PHP?] (Http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php) – Jocelyn

ответ

3

Если вы хотите использовать обозначение объекта, тогда вам нужно позвонить mysql_fetch_oject().

$url = mysql_real_escape_string($_GET['Name']); 
$sql="SELECT * FROM Pages WHERE Name='".$url."'"; 
$result=mysql_query($sql); 

if($result) { 
    while($res = mysql_fetch_object($result)) { 
     echo $res->Content; 
    } 
} else { 
    trigger_error(mysql_error()); // this silently writes to the log file 
    echo 'Page not found'; 
} 

Не закрывайте соединение MySQL после запроса, потому что вам все еще нужно подключение для извлечения набора результатов.

Если вы должны использовать библиотеку mysql_*, тогда не забудьте использовать mysql_real_escape_string() для предотвращения внедрения SQL. Лучше было бы перейти на PDO или MySQLi и использовать подготовленный отчет.

Также, or die(mysql_error()) - это действительно плохая практика. Вы должны правильно обработать ошибку, проверив для возвращаемого значения false от mysql_query().

+0

Это решило мою проблему, но я не могу отметить это еще 6 минут. –

0

var_dump($res) его массив. а не объект. и не используйте mysql_* устаревшие. использование mysqli_*

0
  1. Удостоверьтесь, что $url не пуст.
  2. вы не можете сделать $res->content в массиве (это было бы правильно, если $res - объект, но $res - это массив.). Вместо этого используйте $res['Content'].
0
<?php 
require("configish.php"); 

mysql_connect($hosty, $uname, $paswd) or die ('Cannot connect'); 
mysql_select_db($dbnme) or die ('Cannot select database'); 

$url = $_GET['Name']; 
$sql="SELECT * FROM Pages WHERE Name='".$url."'"; 
$result=mysql_query($sql) or die(mysql_error()); 
mysql_close(); 

while($res = mysql_fetch_array($result)) { 
echo $res['Content']; 
} 
?> 

использования, как это. Вы указали переменные переменными. Зачем?

1
<?php 
require("configish.php"); 

// DON'T QUOTE VARIABLES, IT'S UNNECESSARY 
mysql_connect($hosty, $uname, $paswd) or die ("Cannot connect"); 
mysql_select_db($dbnme) or die ("Cannot select database"); 

// ESCAPE YOUR VALUES!!! CAN'T PUT ENOUGH !!! ON THIS!!!! 
$url = mysql_real_escape_string($_GET['Name']); 
$sql = "SELECT * FROM Pages WHERE Name='$url'"; 
$result = mysql_query($sql) or die(mysql_error()); 

// DON'T CLOSE YOUR CONNECTION BEFORE YOU FETCHED YOUR DATA 
//mysql_close(); 

while ($res = mysql_fetch_assoc($result)) { 
    // ACCESS AS ARRAY IF YOU'RE FETCHING AS ARRAY 
    echo $res['Content']; 
} 

Прочитано The Great Escapism (Or: What You Need To Know To Work With Text Within Text), так как вам явно не хватает этих оснований.

0

Вы должны попробовать этот код

<?php 
require("configish.php"); 

mysql_connect("$hosty", "$uname", "$paswd") or die ("Cannot connect"); 
mysql_select_db("$dbnme") or die ("Cannot select database"); 

$url = mysql_real_escape_string($_GET['Name']); 

$sql="SELECT * FROM Pages WHERE Name='".$url."'"; 
$result=mysql_query($sql) or die(mysql_error()); 

while($res = mysql_fetch_array($result)) { 
    echo $res['tableColumnName']; 
}  

    mysql_close(); 

?>