我正在尝试显示由GET数据选择的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;
}
如您所见,我将get数据作为$ id传递给返回结果的方法。但是没有任何东西被退回。目前有三个条目,如果我将SQL语句中的$ id更改为1,2或3,它将显示相应的数据,但它不能与$ id变量一起使用。
网址的确以正确的信息结尾?id = 1。
请原谅我,如果这是愚蠢的事情,我已经被困在这几个小时了!!
答案 0 :(得分:2)
所有这些答案都可以解决您的问题,但没有人提及或阻止SQL Injection。
在你的情况下,我建议(假设articleID
是一个整数字段)。
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . (int)$id . '"';
我也很好奇您为{em> id 字段使用LIKE
的原因。
注意:由于您使用的是MySQLi,我建议您查看prepared statements。
答案 1 :(得分:1)
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "'.$id.'"';
以简单引用转义你的var
答案 2 :(得分:1)
试试这个:
$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'";
或
$sql = 'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "' . $id . '"';
答案 3 :(得分:0)
您需要使用双引号才能让php正确扩展您的变量:)所以请将您的查询更改为
$sql = "SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'";
答案 4 :(得分:0)
更改
'SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE "$id"'
到
"SELECT * FROM tblArticle WHERE tblArticle.articleID LIKE '$id'"
只有当变量介于双引号"