使用准备好的语句对插入内容进行消毒

时间:2018-09-01 10:58:29

标签: php mysqli

我有一个片段,试图将大量数据插入MySQL数据库。

$file = fopen($filename, "r");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
    $sql = "INSERT into universe (`zone`, `area`, `sub`) values('$emapData[0]','$emapData[1]','$emapData[2]')";
}

我尝试在插入之前“准备”数据并尝试进行消毒,

$file = fopen($filename, "r");
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
{
    $sql = $conn->prepare ("INSERT into universe (`zone`, `area`, `sub`) values(?,?,?)");
    $sql = bind_param("sss", '$emapData[0]','$emapData[1]','$emapData[2]');
}

这给了我一个错误:

  

未捕获的错误:调用未定义函数bind_param()

您在哪里以及如何建议我早些定义 bind_param ?谢谢。

1 个答案:

答案 0 :(得分:1)

您离预期的结果不远。

bind_param()mysqli_stmt类中的方法。您在进行$sql = $conn->prepare(...);

时会得到该类的实例

您要做的就是从$sql对象中调用该函数。

顺便说一句,您不必将$emapData[x]括在单引号中。

$sql = $conn->prepare("INSERT into universe (`zone`, `area`, `sub`) values(?, ?, ?)");
$sql->bind_param("sss", $emapData[0], $emapData[1], $emapData[2]);