Wie binden mysqli bind_param Argumente dynamisch in PHP?

Ich gelernt haben, zu verwenden, vorbereitet und gebunden Anweisungen für meine sql-Abfragen, und ich komme mit diesem so weit, es funktioniert ok, aber es ist nicht dynamisch an alle, wenn kommt zu mehreren Parametern oder, wenn es keine parameter benötigt,

public function get_result($sql,$parameter)
    {
        # create a prepared statement
    $stmt = $this->mysqli->prepare($sql);

        # bind parameters for markers
    # but this is not dynamic enough...
        $stmt->bind_param("s", $parameter);

        # execute query 
        $stmt->execute();

    # these lines of code below return one dimentional array, similar to mysqli::fetch_assoc()
        $meta = $stmt->result_metadata(); 

        while ($field = $meta->fetch_field()) { 
            $var = $field->name; 
            $$var = null; 
            $parameters[$field->name] = &$$var; 
        }

        call_user_func_array(array($stmt, 'bind_result'), $parameters); 

        while($stmt->fetch()) 
        { 
            return $parameters;
            //print_r($parameters);      
        }


        # close statement
        $stmt->close();
    }

Dies ist, wie ich es nenne-Objekt-Klassen,

$mysqli = new database(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$output = new search($mysqli);

Manchmal habe ich nicht übergeben zu müssen, in jedem Parameter,

$sql = "
SELECT *
FROM root_contacts_cfm
";

print_r($output->get_result($sql));

Manchmal brauche ich nur einen Parameter,

$sql = "
SELECT *
FROM root_contacts_cfm
WHERE root_contacts_cfm.cnt_id = ?
ORDER BY cnt_id DESC
";

print_r($output->get_result($sql,'1'));

Manchmal brauche ich nur mehr als einen Parameter,

$sql = "
SELECT *
FROM root_contacts_cfm
WHERE root_contacts_cfm.cnt_id = ?
AND root_contacts_cfm.cnt_firstname = ?
ORDER BY cnt_id DESC
";

print_r($output->get_result($sql,'1','Tk'));

So, ich glaube, dass diese Zeile nicht dynamisch genug für die dynamischen Aufgaben vor,

$stmt->bind_param("s", $parameter);

Bauen eine bind_param dynamisch, die ich gefunden habe, das auf die anderen posts online.

call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

Und ich versuchte, Sie zu verändern code aus php.net aber ich bin nirgends bekommen,

if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+ 
    { 
        $refs = array(); 
        foreach($arr as $key => $value) 
            $array_of_param[$key] = &$arr[$key]; 

       call_user_func_array(array(&$stmt, 'bind_params'), $array_of_params);

     }

Warum? Irgendwelche Ideen, wie ich das hinbekomme?

Oder vielleicht gibt es bessere Lösungen?

InformationsquelleAutor laukok | 2011-02-24

Schreibe einen Kommentar