Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于在具有PDO的表中插入数据的函数-参数编号无效:未定义参数_Php_Mysql_Pdo - Fatal编程技术网

Php 用于在具有PDO的表中插入数据的函数-参数编号无效:未定义参数

Php 用于在具有PDO的表中插入数据的函数-参数编号无效:未定义参数,php,mysql,pdo,Php,Mysql,Pdo,这是我第一次使用PDO,我试图创建一个函数,通过传递3个参数在表中插入数据 这就是功能: public function insert($t, $v, $r) { if ($this->active) { if (($t != null) && ($r != null) && ($v != null) && (count($v) == count($r)))

这是我第一次使用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;
    }
但它不起作用。这就是它的回报:

警告:PDOStatement::execute()[PDOStatement.execute]:SQLSTATE[HY093]:无效参数编号:第68行的/Applications/XAMPP/xamppfiles/htdocs/friz/mysql_functions.php中未定义参数 插入
friz
users
id\u user
)值(:id\u user)

你能帮我吗

注:我使用了搜索功能,但没有找到任何解决问题的方法。

您的线路

$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 . ');';
for($i=0;$i

将$r保留为数组

那么您在准备$r之前是否尝试过回显它?我的意思是做一些基本的调试。。。。您正在代码中构建一个名为
$instruction
的变量,然后将其准备为语句。。。你真的知道
$instruction
字符串在那一点上是什么样子吗?我在echo$instruction中打印$instruction的值;在执行查询之前和之后。它返回的是我所期望的:插入
friz
users
id\u user
)值(:id\u user);大多数错误都是错误,这就是为什么第二组眼睛有帮助(代码检查、成对编程)
    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 . ');';