PDO และการเชื่อมโยงพารามิเตอร์ Dynamic Associative Array

ฉันกำลังพยายามผูกพารามิเตอร์กับคำสั่งที่มี Function ด้านล่างอย่างถูกต้อง ฉันกำลังส่งผ่านอาร์เรย์ที่เชื่อมโยง value=>datatype

ฉันได้รับข้อผิดพลาดขณะพยายามทำสิ่งนี้: Notice: Undefined offset: 0 in db.class.php on line 69 Notice: Undefined offset: 1 in db.class.php on line 69

บรรทัด 69 คือ for บรรทัดใน Function

ฉันจะแก้ไขปัญหานี้ได้อย่างไร? และ/หรือฉันควรจะทำแบบนี้อีกล่ะ?

นี่ Function

protected function ConvertParams($stmt, $params){
    $parrs = $params;
    if(is_array($parrs)){
        $parrCt = count($parrs);
        echo '<pre>';
        print_r($parrs);
        echo '</pre>';
        echo '<hr />';
        for($i = 0; $i < $parrCt; ++$i){
            switch ($parrs[$i][1]){
                case 'string':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_STR);
                    break;
                case 'int':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_INT);
                    break;
                case 'boolean':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_BOOL);
                    break;
                case 'lob':
                    $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_LOB);
                    break;
                default:
                    $stmt->bindParam($i + 1, $parrs[$i][0]);
            }
        }
    }
}

นี่คือ array:

$db->Params = array('%a%'=>'string', '%Welcome%'=>'string');

โปรดสมมติว่าฉันกำลังเชื่อมต่อกับฐานข้อมูลอย่างถูกต้อง และแบบสอบถามดำเนินการอย่างถูกต้อง (ลบปัญหา bindParam นี้)


person Kevin    schedule 05.03.2013    source แหล่งที่มา
comment
คุณช่วยกรุณาโพสต์โค้ดตัวอย่างที่ใช้ฟังก์ชันนี้ได้ไหม   -  person Your Common Sense    schedule 05.03.2013


คำตอบ (2)


คุณไม่จำเป็นต้องมี "วิธีการผูกที่เหมาะสม" หรือฟังก์ชันนี้ทั้งหมดเลย เพียงส่งอาร์เรย์ของพารามิเตอร์โดยตรงเพื่อดำเนินการ:

$params = array('%a%', '%Welcome%');
$stmt->execute($params);

มันจะย่อโค้ดของคุณให้สั้นลงอย่างมากโดยไม่มีข้อบกพร่องใดๆ

โปรดรักษาโค้ดของคุณให้สะอาดและเรียบง่าย
ความยุ่งยากที่ไม่มีประโยชน์จะทำให้การสนับสนุนและบำรุงรักษาทำได้ยาก

person Your Common Sense    schedule 05.03.2013
comment
Useless complication will make it hard to support and maintain. =) ฉันเห็นด้วย ฉันมาจากพื้นหลัง Classic ASP ดังนั้นฉันจึงถือว่าการกำหนดพารามิเตอร์จะเป็นวิธีที่เหมาะสมในการทำ มีความล้มเหลวในการดำเนินการตามที่คุณโพสต์หรือไม่? - person Kevin; 05.03.2013
comment
กรณี เท่านั้น ที่ฉันรู้จักแสดงอยู่ใน pdo tag wiki ใต้ชื่อ "PDO prepared statements and LIMIT" - person Your Common Sense; 05.03.2013

โพสต์แรกของฉัน... ฉันอาจผิดที่นี่ แต่ฉันเชื่อว่าไม่มีดัชนี [0] หรือ [1] ของ $parrs เมื่อคุณส่งผ่านโดยมีดัชนีชื่อ '%a%' และ '%Welcome%' .

คุณสามารถลองแทนที่ [0] และ [1] ด้วย %a% และ %Welcome% ตามลำดับ หรือใช้ดัชนีตัวเลขสำหรับอาร์เรย์

person Brock Hensley    schedule 05.03.2013
comment
มันจำเป็นอย่างที่ฉันมี... Value =› Datatype - person Kevin; 05.03.2013
comment
ฉันไม่ได้บอกว่าคุณต้องเปลี่ยนอาร์เรย์ของคุณ แต่คุณไม่สามารถอ้างอิง [0] ได้หากอาร์เรย์ไม่มีดัชนีตัวเลข เรียกมันตามดัชนีที่มีชื่อหรือรับดัชนีตัวเลขตามลิงก์ของฉัน ขอบคุณที่อ่านและให้ -1 กับฉัน - person Brock Hensley; 05.03.2013