我正在尝试在SQL中获取URL参数,但没有任何反应。
这是我的网址:
http://localhost/webshop/imagegallery.php?categori=necklace
这是我的SQL查询:
$sql = 'SELECT count(productid) FROM products where productcategori=".$_GET["categori"]"';
我做错了什么?
也要查看此查询:
$sql = 'select * from products join ids on products.productid=ids.productid join photos on photos.photosid=ids.photoid where products.productcategori='".$_GET["kategori"]."' && ids.photonumber=1 ORDER BY products.productid DESC $limit';
答案 0 :(得分:0)
首先,你的引号似乎是个问题。尝试将您的查询行更改为:
$sql = "SELECT count(productid) FROM products where productcategori='".$_GET["categori"]."'";
此外,您应该永远将变量插入到这样的SQL查询中。决不。 原因是,像这样,您的系统容易受到SQL注入的攻击。
相反,请考虑使用PDO。 This SO question有一个很好的答案,如何正确地做到这一点。
使用该答案,这是关于问题最后部分的一些示例代码。请注意,我用PDO占位符替换了查询字符串中的所有变量。
<?php
$pdo = new PDO('mysql:dbname=mydatabase;host=127.0.0.1;charset=utf8', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM products JOIN ids ON products.productid=ids.productid JOIN photos ON photos.photosid=ids.photoid WHERE products.productcategori=:categori && ids.photonumber=1 ORDER BY products.productid DESC LIMIT :limit_min , :limit_max";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':categori', $_GET['categori']);
$stmt->bindParam(':limit_min', ($pagenum - 1) * $page_rows, PDO::PARAM_INT);
$stmt->bindParam(':limit_max', $page_rows, PDO::PARAM_INT);
$stmt->execute();
foreach($stmt as $row) {
// do something with $row
}
?>