这是我第一次使用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()[pdestatement.execute]:SQLSTATE[HY093]:无效参数编号:第68行的/Applications/XAMPP/examplepfiles/htdocs/friz/mysql_functions.php中未定义参数插入
friz
。users
(id_user
)值(:id_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 . ');';
将$r保留为数组