Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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 mysql,其中列=所有可能值_Php_Mysql - Fatal编程技术网

Php mysql,其中列=所有可能值

Php mysql,其中列=所有可能值,php,mysql,Php,Mysql,有没有办法做这样的事?给$variable一个默认值,让mysql返回所有行 SELECT * FROM table WHERE column = ?; bind_param('i', $variable); 这并不像听起来那么愚蠢。。。我需要根据用户输入过滤内容,因此如果用户未填写输入/选择,则值将为ALL(或正确答案)。我不想在prepare()中打印php变量,也不想将默认变量设置为所有可能的值。正确的方法是什么 我实际上是这样做的: if ($stmt = $mysqli->p

有没有办法做这样的事?给$variable一个默认值,让mysql返回所有行

SELECT * FROM table WHERE column = ?;

bind_param('i', $variable);
这并不像听起来那么愚蠢。。。我需要根据用户输入过滤内容,因此如果用户未填写输入/选择,则值将为
ALL
(或正确答案)。我不想在
prepare()
中打印php变量,也不想将默认变量设置为所有可能的值。正确的方法是什么

我实际上是这样做的:

if ($stmt = $mysqli->prepare(' SELECT t1.id, t2.*
                               FROM ' . $table . ' t1
                               INNER JOIN property t2 ON t2.id = t1.id
                               WHERE t2.use = ?
                               ' . $city_cond
                                 . $zone_cond . '
                               LIMIT ?, ?'))

但是我不想在
prepare()
中打印,所以我问是否有任何方法可以使用
bind_param()
并声明默认值。

我使用类似的方法来解决类似问题:

$sql = 'SELECT * FROM table WHERE cond1 = ?';
$sqlparams = array('cond1');
if (!empty($column) && $column != 'ALL') {
    $sql .= ' AND column = ?';
    $sqlparams[] = $column;
}
// add more conditions, ORDER BY, LIMIT etc.
$stmt = $dbh->prepare($sql);
$stmt->execute($sqlparams);
与mysqli的差异(未测试):

也许这可以通过命名参数完成,并且总是绑定,不管是否需要

另一种方法:

$sql = 'SELECT * FROM table WHERE cond1 = ? AND (1 = ? OR column = ?)';
$stmt = $dbh->prepare($sql);
$stmt->bind_param('i', (empty($column) ? 1 : 0));
$stmt->bind_param('s', $column);
$stmt->execute();

SELECT*FROM table
,它已经选择了所有列为什么不使用
SELECT*FROM table
?如果解释不清楚,很抱歉。bind_参数中的变量将包含一个要筛选的值,但如果用户没有填写输入,该变量将具有默认值。在这种情况下,答案是
$column==“”?“SELECT*FROM table”:“SELECT*FROM table WHERE column=$column”
(当然针对SQL注入进行了更正)是的,当实际查询比较大时,这并不容易。您是否使用PDO?我不认为我可以用mysqli做到这一点。@ChazyChaz-mysqli支持prepared语句,但它不支持数组?是的,我使用PDO(并且大部分使用postgres)。我添加了一些更改,可能不是最好的代码,但应该可以(!)工作。我还添加了另一种方法。好的,谢谢你的例子,我现在可以让它工作了。
$sql = 'SELECT * FROM table WHERE cond1 = ? AND (1 = ? OR column = ?)';
$stmt = $dbh->prepare($sql);
$stmt->bind_param('i', (empty($column) ? 1 : 0));
$stmt->bind_param('s', $column);
$stmt->execute();