如何使用php中的预处理语句插入数据库

时间:2014-07-09 07:59:13

标签: php mysql pdo

你好,我是一个java开发人员,但我刚接触到这里我试图使用这里提到的准备语句将数据插入数据库http://www.php.net/manual/en/pdo.prepared-statements.php,但我得到一个错误,我可能知道什么样的错误是这和解决这个问题的任何帮助。

错误:致命错误:在第17行的G:**** \ xampp \ htdocs **** \ registrationControl.php中调用未定义的方法mysqli_stmt :: bindParam()

<?php

$con = new mysqli("127.0.0.1", "root", "", "ksbka");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['username_first']);
$username_email = mysqli_real_escape_string($con, $_POST['username_email']);
$username_tele = mysqli_real_escape_string($con, $_POST['username_tele']);
echo $firstname."@@@@@".$username_email;

$query="INSERT INTO instructorregistration (Id, Name, email, telephone) VALUES (?, ?, ?, ?)";

$pst = $con->prepare($query);
$pst->bindParam(1, "");
$pst->bindParam(2, $firstname);
$pst->bindParam(3, $username_email);
$pst->bindParam(4, $username_tele);
$pst->execute();
if (!mysqli_query($con,$pst)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:0)

当你使用mysqli

时,你必须使用mysqli方法
$stmt = $con->prepare($query);
$stmt->bind_param(1, "");
...
if (!$stmt->execute()) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
/* explicit close recommended */
$stmt->close();

/* Non-prepared statement */
$res = $mysqli->query("SELECT id FROM test");
var_dump($res->fetch_all());

编辑:添加了官方documentation

中的一些代码

答案 1 :(得分:0)

我认为如果你想使用bindParam()方法,那么该值应该是PDOStatement的一个实例。

你看到的文件如下:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
我认为

$dbh是一个PDO实例,而不是mysqli实例。因为没有mysqli::bindParam()

要解决此问题,您可以:

  1. 使用PDO类而不是Mysqli
  2. 以最简单的方式创建查询:

    $query="INSERT INTO instructorregistration (Id, Name, email, telephone) VALUES (NULL, $firstname, $username_email, $username_tele)";