PHP PDO MYSQL所有
我准备了以下mysql语句来搜索表。 表中有一个is_活动列。用户可以选择搜索真(1)、假(0)或全部。在所有语句的情况下,需要搜索true和false 当系统通过:isActive绑定时,如果用户希望搜索true和false,我需要对:isActive应用什么值?提前感谢您的帮助PHP PDO MYSQL所有,php,mysql,pdo,Php,Mysql,Pdo,我准备了以下mysql语句来搜索表。 表中有一个is_活动列。用户可以选择搜索真(1)、假(0)或全部。在所有语句的情况下,需要搜索true和false 当系统通过:isActive绑定时,如果用户希望搜索true和false,我需要对:isActive应用什么值?提前感谢您的帮助 $stmt = $conn->prepare( 'SELECT company_id, name, alias, fk_company_type as type, is_active as active
$stmt = $conn->prepare(
'SELECT company_id, name, alias, fk_company_type as type, is_active as active
FROM company
WHERE is_active = :isActive
AND name LIKE :srchField'
);
$stmt->bindParam(':srchField', $srchField, PDO::PARAM_INT);
//bind :srchField to $srchField in sql statement
$stmt->bindParam(':isActive', $isActive, PDO::PARAM_INT);
有一个php标记可以检查变量是否为整数,使用它可以解决此问题
$stmt = $conn->prepare('SELECT company_id, name, alias, fk_company_type as type, is_active as active FROM company WHERE (is_active = :isActive) AND (name LIKE :srchField)');
$stmt->bindParam(':srchField', $srchField, PDO::PARAM_INT); //bind :srchField to $srchField in sql statement
$isActive = is_int($int) ? $int : '0 OR 1'; // $int is an argument which to search option.
$stmt->bindParam(':isActive', $isActive, PDO::PARAM_INT);
您可以在之前对所有内容进行检查,这样您的prepare周围就有一个if语句,然后准备一个包含is_active where子句的语句,或者准备一个不包含该子句的语句。您不能在查询中省略
where
子句,或者在这种情况下更改为允许<2
条件吗输入Dave和n-dru,我可以只使用单独的if语句,但原因是我想找到一种方法,因为我还有其他条件要包含在Where中。例如,fk_公司类型,可以是全部公司类型,也可以是某个公司类型。我试图避免多个if语句。但似乎我别无选择。我知道一定有办法注入PDO准备的语句中!:)谢谢你。我尝试过,但PHP似乎不允许我注入“0或1”。它看起来只接受0,而忽略或1。你有这个问题吗?