这是我第一次使用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]:参数号无效:参数未在第68行的/Applications/XAMPP/xamppfiles/htdocs/friz/mysql_functions.php中定义 INSERT INTO
friz
。users
(id_user
)VALUES(:id_user);
你能帮助我吗?
P.S。:我使用了搜索功能,但我找不到任何解决问题的方法。
答案 0 :(得分: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作为数组