| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
ash
Anmeldedatum: 08.01.2008 Beiträge: 65
|
Verfasst am: Fr 30 Jan, 2009 13:03 Titel: Prepared Statements |
|
|
Ich habe einen DB Wrapper und möchte eine Methode, die mir von einer Abfrage ein assoziatives Array zurückgibt. Mein Problem: ich verwende Prepared Statements und bekomme es nicht hin, dieses Array zu erstellen.
Eine Methode führt die Abfrage aus:
| Php: |
<?php
public function query ($sql, $params = array())
{
$stmt = $this->_prepare($sql);
$this->_bindParams($stmt, $params);
$stmt->execute();
return $stmt;
}
?>
|
Diese liefert ein Objekt zurück. Die Methode fetchAssoc sieht bisher so aus:
| Php: |
<?php
public function fetchAssoc($sql, $params)
{
$stmt = $this->query($sql, $params);
$data = $stmt->result_metadata();
$stmt->bind_result($name, $value);
while ($row = $stmt->fetch()) {
$result[$name] = $value;
}
return $result;
}
?>
|
Das Problem an der Sache: bind_result() nimmt eine variable Anzahl an Parametern, eben je nach Resultset. Wie bewerkstellige ich diesen Teil sinnvoll? Ich habe diverse Dinge ausprobiert, bin aber auf keinen grünen Zweig gekommen.
|
|
| Nach oben |
|
 |
Gast
|
Verfasst am: Mo 02 Feb, 2009 11:47 Titel: |
|
|
ich habe leider die Frage nicht verstanden.
Wie wäre es, wenn du einfach PDO benutzt, bzw. die Konzepte davon.
Slava
|
|
| Nach oben |
|
 |
ash
Anmeldedatum: 08.01.2008 Beiträge: 65
|
Verfasst am: Do 05 Feb, 2009 12:08 Titel: |
|
|
also, ich möchte einfach eine Methode, die wie mysql_fetch_assoc() funktioniert, nur eben mit prepared statements.
aus den user contribs habe ich diesen Schnipsel:
| Php: |
<?php
public function fetchAssoc($sql, $params)
{
// execute();
$stmt = $this->query($sql, $params);
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field())
{
$x = &$row[$field->name];
$params[] = &$row[$field->name];
}
while ($stmt->fetch()) {
foreach($row as $key => $val) {
$c[$key] = $val;
}
$result[] = $c;
}
return $result;
}
?>
|
Das erzeugt bei mir allerdings diesen Fehler:
| Code: |
mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Number of bind variables doesn't match number of fields in prepared statement in ...
|
Jmd eine Idee dazu?
|
|
| Nach oben |
|
 |
ash
Anmeldedatum: 08.01.2008 Beiträge: 65
|
Verfasst am: Mi 11 Feb, 2009 20:38 Titel: |
|
|
Niemand einen Tipp??
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
|
| Nach oben |
|
 |
Gast
|
Verfasst am: Mi 11 Feb, 2009 21:54 Titel: |
|
|
yeah, und nun? Das Problem ist ja, dass dies bei Abfragen differieren kann und somit dynamisch ermittelt werden müsste. Allerdings hat bisher keiner meiner Ansätze (oder der der User Contribs) funktioniert.
Die Fehlermeldung lesen bekomme ich gerade noch zustande 
|
|
| Nach oben |
|
 |
Simon W. Anti-verdenglischungs-Abgeordneter
Anmeldedatum: 05.11.2007 Beiträge: 283 Wohnort: Aachen
|
|
| Nach oben |
|
 |
ash
Anmeldedatum: 08.01.2008 Beiträge: 65
|
|
| Nach oben |
|
 |
|