dongnianchou7047 2016-08-10 00:48 采纳率: 0%
浏览 31
已采纳

PHP PDO使用IN和WHERE运算符准备语句

I am new to PDO (coming from mysqli) and I have been searching for hours and cannot seem to figure out how to combine the WHERE and IN operators with PDO prepared statements.

Simple WHERE (Works Fine):

$value1 = 'val1';
$value2 = 'val2';
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE val1 = ? AND val2 = ?');
$stmt->bindParam(1, $value1);
$stmt->bindParam(2, $value2);
$stmt->execute();

IN Statement (Works Fine)

$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->execute($myArr);

Combining (Not Working):

$value1 = 'val1';
$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE column = ? AND cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $value1);
$stmt->execute($myArr);

Thanks In Advance!

  • 写回答

1条回答 默认 最新

  • dtrotfd1012 2016-08-10 01:09
    关注

    I believe the reason this is not working is because you are using both

    $stmt->bindParam(1, $value1); $stmt->execute($myArr);

    To use an array and make it work do as follows:

    prepare($sql);

    execute($myArr);

    In $myArr you should include whatever columns = ? is supposed to be, you can add this to the beginning of the array using array_unshift() like this array_unshift($myArr, 'X'); http://php.net/manual/en/function.array-unshift.php

    After calling array_unshift() the variable $myArr will have the values as follows:

    [myArr] => Array
            (
                [0] => X
                [1] => NY
                [2] => PARIS
                [3] => ROME
            )
    

    Now you can call the PDO statements correctly:

    prepare($sql);
    execute($myArr);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题