-1

PDO を使用するのはこれが初めてで、3 つのパラメーターを渡すだけでテーブルにデータを挿入する関数を作成しようとしています。

これは機能です:

public function insert($t, $v, $r)
    {
        if ($this->active)
        {
            if (($t != null) && ($r != null) && ($v != null) && (count($v) == count($r)))
            {
                $instruction = 'INSERT INTO `' . DBNAME . '`.`' . $t . '` (';

                for ($i = 0; $i < count($r); $i++)
                    $_r[$i] = '`' . $r[$i] . '`';
                $_r = implode(',', $_r);

                $instruction .= $_r . ') VALUES (';

                for ($i = 0; $i < count($r); $i++)
                    $r[$i] = ':' . $r[$i];
                $r = implode(',', $r);

                $instruction .= $r . ');';

                $statement = $this->PDO->prepare($instruction);

                for ($i = 0; $i < count($r); $i++)
                    $statement->bindParam($r[$i], $v[$i]);

                $statement->execute();
                echo $instruction;
                return true;
            } else
                return false;
        } else
            return false;
    }

私はこれを試しました:

$t = "users";
$v = array(201);
$r = array("id_user");

$data->insert($t, $v, $r);

しかし、うまくいきません。それが返すものです:

警告: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: 無効なパラメーター番号: パラメーターが /Applications/XAMPP/xamppfiles/htdocs/friz/mysql_functions.php の 68 行目の INSERT INTO で定義されていませんでしたfrizusers( id_user) 値 (:id_user);

手伝って頂けますか?

PS: 検索機能を使用しましたが、問題を解決するものは見つかりませんでした。

4

1 に答える 1

2

あなたのライン

$r = implode(',', $r);

$r を配列から文字列に変換します。

そのため、バインドしようとすると、名前の配列が含まれなくなります。$r[$i]':' である文字列 $r の最初の文字になります。

    for ($i = 0; $i < count($r); $i++)
        $_r1[$i] = '`' . $r[$i] . '`';
    $_r1 = implode(',', $_r1);

    $instruction .= $_r1 . ') VALUES (';

    for ($i = 0; $i < count($r); $i++)
        $_r2[$i] = ':' . $r[$i];
    $_r2 = implode(',', $_r2);

    $instruction .= $_r2 . ');';

$r を配列のままにします

于 2013-06-29T14:55:13.953 に答える