Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL中是否有要返回的符号;“全部”;_Php_Mysql_Search - Fatal编程技术网

Php SQL中是否有要返回的符号;“全部”;

Php SQL中是否有要返回的符号;“全部”;,php,mysql,search,Php,Mysql,Search,我正在尝试为我的程序创建一个搜索代码,我正在用PHP编写,我正在尝试找出一种使代码更加紧凑的好方法。我通过观看YouTube学习了PHP,所以让我休息一下;) 以下是我开始的内容: if (empty($_POST['nick-cc'])) { $sql = "SELECT * FROM pcr WHERE student = $user->id"; } else { $sql = "SELECT * FROM pcr WHERE student = $user->id AND cc

我正在尝试为我的程序创建一个搜索代码,我正在用PHP编写,我正在尝试找出一种使代码更加紧凑的好方法。我通过观看YouTube学习了PHP,所以让我休息一下;)

以下是我开始的内容:

if (empty($_POST['nick-cc'])) {
$sql = "SELECT * FROM pcr WHERE student = $user->id";
} else {
$sql = "SELECT * FROM pcr WHERE student = $user->id AND cc = '%$nccn%'";
}
对于数据库中的每一列,“if”语句都必须重复。所以我开始思考,为什么我不能在字段中使用SQL开头的“*”来表示,如果没有键入搜索,它只会返回所有内容。这样,如果有人来到页面,或者只是没有键入任何内容,然后单击“搜索”,它仍然会搜索,但它会搜索*(全部),但如果他们确实键入了一些内容,那么它会搜索该内容。这就是我想到的

但不用说,这对我不起作用。这是白费力气吗?有更好的办法吗

if (empty($_POST['nick-cc'])) {
$nccn = '*';
} else {
$nccn = ''.$_POST['nick-cc'].'';
}
$sql = "SELECT * FROM pcr WHERE student = $user->id AND cc = '%$nccn%'";

我真的看不出有什么理由让你的搜索变得更复杂。我通常只是像这样附加
LIKE
子句:

$sql = "SELECT * FROM pcr WHERE student = $user->id";

if($_POST['nick-cc'] !== ''){
    $sql .= " AND cc = '%$nccn%'";
}
更重要的是,使用此方法很容易受到sql注入的攻击。我建议您研究参数化查询和准备好的语句。下面是一个使用内置
Mysqli
类的简单代码示例

$sql = 'SELECT * FROM pcr WHERE student = ?';
$mysqli = new Mysqli($host, $username, $password, $database);
if($_POST['nick-cc'] === ''){
    $stmt = $mysqli->prepare($sql);
    if($stmt === false){
        // there was an error
    }

    $stmt->bind_param('i', $user->id);
}else{
    $sql .= ' AND cc = ?';
    $stmt = $mysqli->prepare($sql);
    if($stmt === false){
        // there was an error
    }

    $stmt->bind_param('is', $user->id, '%' . $_POST['nick-cc'] . '%');
}

$stmt->execute(); // returns true or false
var_dump($stmt->fetch_array()); // return the results

我真的看不出有什么理由让你的搜索变得更复杂。我通常只是像这样附加
LIKE
子句:

$sql = "SELECT * FROM pcr WHERE student = $user->id";

if($_POST['nick-cc'] !== ''){
    $sql .= " AND cc = '%$nccn%'";
}
更重要的是,使用此方法很容易受到sql注入的攻击。我建议您研究参数化查询和准备好的语句。下面是一个使用内置
Mysqli
类的简单代码示例

$sql = 'SELECT * FROM pcr WHERE student = ?';
$mysqli = new Mysqli($host, $username, $password, $database);
if($_POST['nick-cc'] === ''){
    $stmt = $mysqli->prepare($sql);
    if($stmt === false){
        // there was an error
    }

    $stmt->bind_param('i', $user->id);
}else{
    $sql .= ' AND cc = ?';
    $stmt = $mysqli->prepare($sql);
    if($stmt === false){
        // there was an error
    }

    $stmt->bind_param('is', $user->id, '%' . $_POST['nick-cc'] . '%');
}

$stmt->execute(); // returns true or false
var_dump($stmt->fetch_array()); // return the results

你为什么不试试这个呢:

if (empty($_POST['nick-cc'])) {
$nccn = NULL;
} else {
$nccn =  ' AND cc =  %'.$_POST['nick-cc'].'%';
}
$sql = "SELECT * FROM pcr WHERE student = $user->id $nccn";

你为什么不试试这个呢:

if (empty($_POST['nick-cc'])) {
$nccn = NULL;
} else {
$nccn =  ' AND cc =  %'.$_POST['nick-cc'].'%';
}
$sql = "SELECT * FROM pcr WHERE student = $user->id $nccn";

这是什么?另外,我们是否使用POST进行搜索?i、 搜索字段是
$\u POST['nick-cc']
吗?很抱歉,我忘了将$nccn更改为$\u POST['nick-cc']。是的,所有这些都在POST中。我认为
nick cc
不是一个有效的变量名。它应该是nick_cc或类似的东西这是什么?另外,我们是否使用POST进行搜索?i、 搜索字段是
$\u POST['nick-cc']
吗?很抱歉,我忘了将$nccn更改为$\u POST['nick-cc']。是的,所有这些都在POST中。我认为
nick cc
不是一个有效的变量名。应该是尼克(nick_cc)或者类似的名字这是真的。我没想到这个!这将是完美的!我还将研究参数化查询,看看是否能找到答案:)@JessePfieffer我编辑了这篇文章,以包含一个示例,但可能会有一些typos@JessePfieffer我在我的机器上测试了代码,我只得到了sql错误,所以现在应该很好,我真的很感激:)。我一直在努力学习更好、更安全的方法,这两者兼而有之@JessePfieffer没问题这是真的。我没想到这个!这将是完美的!我还将研究参数化查询,看看是否能找到答案:)@JessePfieffer我编辑了这篇文章,以包含一个示例,但可能会有一些typos@JessePfieffer我在我的机器上测试了代码,我只得到了sql错误,所以现在应该很好,我真的很感激:)。我一直在努力学习更好、更安全的方法,这两者兼而有之@JessePfieffer没问题