Php 将th值设为NULL,如果为空,则不执行where
我现在:Php 将th值设为NULL,如果为空,则不执行where,php,mysql,where,Php,Mysql,Where,我现在: $inhoud = $_POST['inhoud']; if($inhoud == "") { echo $inhoud; $inhoud = NULL; echo $inhoud; } $sql = 'SELECT DISTINCT bestanden.id AS id, bestanden.uploader AS uploader, bestanden.name AS name,
$inhoud = $_POST['inhoud'];
if($inhoud == "") {
echo $inhoud;
$inhoud = NULL;
echo $inhoud;
}
$sql = 'SELECT DISTINCT bestanden.id AS id,
bestanden.uploader AS uploader,
bestanden.name AS name,
bestanden.mime AS mime,
bestanden.size AS size,
bestanden.created AS created,
zoeken.open_id AS open_id,
zoeken.woord AS woord
FROM bestanden
LEFT JOIN zoeken ON bestanden.id = zoeken.open_id
WHERE zoeken.woord = "' . $inhoud . '" AND
bestanden.name LIKE "%' . $_POST['naam'] . '%" AND
bestanden.mime LIKE "%' . $_POST['formaat'] . '%"
AND bestanden.created LIKE "%' . $_POST['datum'] . '%";';
$result = mysql_query($sql);
但是当我搜索时,$inhoud是空的,我没有得到任何结果,因为那里没有空的(“”)(inhoud)空间。可以在我的mysql\u查询中使用if或其他内容吗?使用空函数
$sql = 'SELECT DISTINCT bestanden.id AS id, bestanden.uploader AS uploader, bestanden.name AS name, bestanden.mime AS mime, bestanden.size AS size, bestanden.created AS created, zoeken.open_id AS open_id, zoeken.woord AS woord FROM bestanden LEFT JOIN zoeken ON bestanden.id = zoeken.open_id
WHERE 1=1';
if(!empty($inhoud))
$sql.=' AND zoeken.woord="' . $inhoud . '"';
$sql.=' AND bestanden.name LIKE "%' . $_POST['naam'] . '%" AND bestanden.mime LIKE "%' . $_POST['formaat'] . '%" AND bestanden.created LIKE "%' . $_POST['datum'] . '%"';
$result = mysql_query($sql);
empty($inhound);
看这里:也许是斯特伦()
。它们不再得到维护,并且已经开始使用。看到了吗?相反,学习,并使用,或-将帮助您决定哪一个。如果您选择PDO
您可以尝试以下方法:
$inhoud = $_POST['inhoud'];
if ($inhoud == "") {
echo $inhoud;
$inhoud = NULL;
echo $inhoud;
}
$sql = 'SELECT DISTINCT bestanden.id AS id,
bestanden.uploader AS uploader,
bestanden.name AS name,
bestanden.mime AS mime,
bestanden.size AS size,
bestanden.created AS created,
zoeken.open_id AS open_id,
zoeken.woord AS woord
FROM bestanden
LEFT JOIN zoeken ON bestanden.id = zoeken.open_id
WHERE ';
if(!empty($inhoud)) {
$sql .= 'zoeken.woord = "' . $inhoud . '" AND';
}
$sql .= 'bestanden.name LIKE "%' . $_POST['naam'] . '%" AND
bestanden.mime LIKE "%' . $_POST['formaat'] . '%"
AND bestanden.created LIKE "%' . $_POST['datum'] . '%";';
$result = mysql_query($sql);
首先,您不应该假设在任何情况下都设置了
$\u POST[…]
(除非您已经检查了是否已设置)。正确的用法是:
$inhoud = null:
if( isset( $_POST['inhound'])){
$inhound = trim( $_POST['inhound']); // Trim to prevent strings like " "
if( strlen( $inhound) < 1){
$inhound = null;
}
}
尝试使用mysqli而不是mysql。
$inhoud = null:
if( isset( $_POST['inhound'])){
$inhound = trim( $_POST['inhound']); // Trim to prevent strings like " "
if( strlen( $inhound) < 1){
$inhound = null;
}
}
$sql = 'SELECT DISTINCT bestanden.id AS id, bestanden.uploader AS uploader,
bestanden.name AS name, bestanden.mime AS mime,
bestanden.size AS size, bestanden.created AS created,
zoeken.open_id AS open_id, zoeken.woord AS woord
FROM bestanden
LEFT JOIN zoeken ON bestanden.id = zoeken.open_id
WHERE zoeken.woord=:inhound
AND bestanden.name LIKE :naam
AND bestanden.mime LIKE :formaat
AND bestanden.created LIKE :date';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->bindParam(':naam', isset( $_POST['naam']) ? '%' . $_POST['naam'] . '%', '%');
$sth->bindParam(':formaat', isset( $_POST['formaat']) ? '%'.$_POST['formaat'].'%', '%');
$sth->bindParam(':naam', isset( $_POST['date']) ? '%' . $_POST['date'] . '%', '%');
$sth->bindParam(':inhound', is_null( $inhound) ? '%' . $inhound . '%', '%');
$sth->execute();
$sth->fetchAll();