PDO dan Parameter Array Asosiatif Dinamis yang mengikat

Saya mencoba mengikat parameter dengan benar ke pernyataan dengan Function di bawah. Saya meneruskan array asosiatif, value=>datatype.

Saya mendapat pesan kesalahan saat mencoba ini: Notice: Undefined offset: 0 in db.class.php on line 69 Notice: Undefined offset: 1 in db.class.php on line 69

Baris 69 adalah baris for di Function

Bagaimana cara memperbaikinya? Dan/Atau haruskah saya repot-repot melakukannya seperti ini?

Ini 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]);
            }
        }
    }
}

Inilah array:

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

Harap asumsikan bahwa saya terhubung ke db dengan benar, dan kueri dijalankan dengan benar (tanpa masalah bindParam ini).


person Kevin    schedule 05.03.2013    source sumber
comment
Bisakah Anda memposting kode contoh tempat fungsi ini digunakan?   -  person Your Common Sense    schedule 05.03.2013


Jawaban (2)


Anda tidak memerlukan "cara pengikatan yang tepat" atau keseluruhan fungsi ini sama sekali. Cukup berikan serangkaian parameter langsung untuk dieksekusi:

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

itu akan mempersingkat kode Anda secara dramatis tanpa kekurangan apa pun.

Harap jaga kode Anda tetap bersih dan sederhana.
Kerumitan yang tidak berguna akan menyulitkan dukungan dan pemeliharaan.

person Your Common Sense    schedule 05.03.2013
comment
Useless complication will make it hard to support and maintain. =) Saya setuju, saya berasal dari latar belakang ASP Klasik, jadi saya berasumsi parameterisasi adalah cara yang tepat untuk melakukannya. Apakah ada hambatan dalam melakukan postingan Anda? - person Kevin; 05.03.2013
comment
Kasus satu-satunya yang saya ketahui tercantum dalam wiki tag pdo di bawah "PDO prepared statements and LIMIT" judul. - person Your Common Sense; 05.03.2013

Posting pertama saya... Saya bisa saja salah di sini, tapi saya yakin tidak ada indeks [0] atau [1] dari $parrs saat Anda meneruskannya dengan indeks bernama '%a%' dan '%Welcome%' .

Anda dapat mencoba mengganti [0] dan [1] dengan %a% dan %Selamat Datang%, atau menggunakan indeks numerik untuk array.

person Brock Hensley    schedule 05.03.2013
comment
itu diperlukan seperti yang saya miliki... Nilai =› Tipe data - person Kevin; 05.03.2013
comment
Saya tidak mengatakan Anda harus mengubah susunan Anda. Namun Anda tidak dapat mereferensikan [0] jika array tidak memiliki indeks numerik. Sebut saja dengan indeks namanya, atau dapatkan indeks numerik berdasarkan tautan saya. Terima kasih telah membaca dan memberi saya -1 - person Brock Hensley; 05.03.2013