首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中生成动态查询字符串?

如何在php中生成动态查询字符串?
EN

Stack Overflow用户
提问于 2013-07-28 04:47:39
回答 3查看 134关注 0票数 0

我正在为一个图书数据库创建一个搜索引擎。我有一个用于精确搜索的单选按钮和类似的search.My查询,我应该如何生成一个精确的search.For查询(例如,我有ISBN和field.Likewise ),因为field.Likewise我有很多字段,它们可以保持为空的和填充的too.How,我应该为这个查询生成一个too.How查询吗?

如果标题被填充并且isbn被填充,那么它应该是

代码语言:javascript
复制
select * from book_info where isbn="$_POST['isbn']" and title="$_POST['title']"

如果填充了10个字段,那么我应该如何生成?检查字段是否为空无是一个解决方案。但还有比这更好的解决办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-28 04:59:09

您可以像下面的代码一样将所有选项放在列表中。

代码语言:javascript
复制
$search = array("isbn" => $_POST['isbn'],
                "title" => $_POST['title'],
                "table_field" => $input_value);

然后,使用每个循环来构造条件部分。

代码语言:javascript
复制
$sql = "SELECT * FROM book_info";
$condition = "";
foreach($search as $key => $value) {
    if (isset($value) && ($value != "")) {
        if ($condition != "") {
            $condition .= " AND ";
        }
        $condition .= "{$key}=:{$key}";
    }
}

使用prevent语句防止SQL注入。

代码语言:javascript
复制
$sh = $db->prepare($sql . " WHERE " . $condition);
foreach($search as $key => $value) {
    if (isset($value) && ($value != "")) {
        if ($condition != "") {
            $condition .= " AND ";
        }
        $sh->bindValue(":{$key}", $value);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2013-07-28 04:59:39

别说了,说到重点..。

试着做这样的事情:

代码语言:javascript
复制
$allowed_keys = ["isbn","title",...]; // or array("isbn"...) if you're not up-to-date
$postvars = array_intersect_key($_POST,array_flip($allowed_keys));
$conditions = []; // or array(); for old PHP
foreach($postvars as $k=>$v) {
    $conditions[] = "`".$k."`='".mysql_real_escape_string($v)."'";
    // use whatever function is suitable for the library you're using
    // I'm assuming the basic mysql library, based on your injection vulnerability
}
if( $conditions) {
    $query = "select * from `book_info` where ".implode(" and ",$conditions);
    // run query
}
票数 2
EN

Stack Overflow用户

发布于 2013-07-28 05:04:20

千万别那么做。您所做的是邀请SQL注入攻击,这使您的网站容易受到黑客攻击。

在PHP中,使用PDO和参数化查询。

代码语言:javascript
复制
$isbn = $_POST['isbn'] . '';
$title = $_POST['title'] . '';


$db = new PDO( "host", "user", "pass");
$stm = $db->prepare( "select id, name, title, whatever from book_info where isbn= ? and and title= ?");
$stm->bindParam( 1, $isbn);
$stm->bindParam( 2, $title);
$stm->execute();
while ($row = $stm->fetchObject())   //or just fetch()
{
   $othervar = $row->name;
   //etc
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17905073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档