PHP PDO: wie die Rückkehr der integer -

Denke ich, es wäre ein Fehler in meiner pdo-abrufen von Daten-Methode,

public function fetch_all($query, $params = array())
    {
        try
        {
            # prepare the query
            $stmt = $this->connection->prepare($query);

            # if $params is not an array, let's make it array with one value of former $params
            if (!is_array($params)) $params = array($params);

            # execute the query
            $stmt->execute($params);

            # return the result
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }

Alle Parameter, die übergeben wurden, die in dieser Methode werden Zeichenfolgen, aber ich brauche Ganzzahlen für sql LIMIT Abfrage, wie unten

$sql = "
    SELECT *

    FROM root_pages
    ORDER BY root_pages.pg_created DESC

    LIMIT ?,?";

items = $connection->fetch_all($sql,array('0','6'));

Es gibt diesen Fehler zurück,

2SQLSTATE[42000]: Syntax error oder
access violation: 1064 Sie haben eine
Fehler in der SQL syntax; check the
das Handbuch, das entspricht Ihrer MySQL
server-version für den richtigen syntax
in der Nähe von "0" oder "6" in Zeile 32

Wie kann ich es beheben?

EDIT:

Wie angedeutet, änderte ich den code in meine Methode zu dieser unten,

# fetch a multiple rows of result as a nested array ( = multi-dimensional array)
    public function fetch_all($query, $params = array())
    {
        try
        {
            # prepare the query
            $stmt = $this->connection->prepare($query);

            # if $params is not an array, let's make it array with one value of former $params
            //if (!is_array($params)) $params = array($params);


            foreach($params as $k=>$p){
              if(is_numeric($p)){
                $stmt->bindParam($k+1, $p, PDO::PARAM_INT);
              }
              else{
                $stmt->bindParam($k+1, $p, PDO::PARAM_STR);
              }
            }
            $stmt->execute();


            # execute the query
            //$stmt->execute($params);

            # return the result
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) 
        {
            # call the get_error function
            $this->get_error($e);
        }
    }

$items = $connection->fetch_all($sql,array(0,6));

dann bekomme ich eine andere Fehlermeldung,

2SQLSTATE[42000]: Syntax error oder
access violation: 1064 Sie haben eine
Fehler in der SQL syntax; check the
das Handbuch, das entspricht Ihrer MySQL
server-version für den richtigen syntax
in der Nähe von "6" in Zeile 32

EDIT:

Ich habe gerade es geändert,

if(is_int($p)){..}

aber noch immer den gleichen Fehler... seufz...

  • Können Sie noch brauchen if (!is_array($params)) $params = array($params);
  • du hast Recht! es funktioniert jetzt! Dank so viel. kann ich Fragen - warum $k+1? Danke!
  • Es ist $k+1 da arrays in PHP sind null-indiziert, aber bindParam will der 1. parameter 1, nicht 0 (und so weiter).
  • habe es Dank 🙂
InformationsquelleAutor laukok | 2011-03-16
Schreibe einen Kommentar