使用准备好的语句清理插入

     2023-05-09     164

关键词:

【中文标题】使用准备好的语句清理插入【英文标题】:Sanitizing insert with prepared statements 【发布时间】:2018-09-01 10:58:29 【问题描述】:

我有这个 sn-p,我试图将大量数据插入 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?谢谢。

【问题讨论】:

这是mysql_stmt 的方法而不是函数-mysqli 返回mysqli_stmt 的实例-在此处查看更多信息:php.net/manual/en/mysqli.quickstart.prepared-statements.php 您可以将prepare移到循环外,准备一次并在每个循环中执行(虽然您似乎没有执行) 为了提高插入速度比使用事务和每几百行提交一次。目前你在为每一行提交这是一个相当大的开销。 否决的投票者可以添加评论吗? @RyanVincent 是的,我也这么认为。感谢您指出。假设 Nigel Ren 的建议会对我有所帮助。 【参考方案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]);

【讨论】:

感谢@Cid。这有帮助:)

使用 PDO 准备好的语句插入致命错误 [重复]

】使用PDO准备好的语句插入致命错误[重复]【英文标题】:INSERTusingPDOpreparedstatementsfatalerror[duplicate]【发布时间】:2015-10-2823:53:27【问题描述】:我正在尝试使用这样的准备好的语句插入值:$dbh=newPDO("mysql:host=$hostname;dbname=$database... 查看详情

mysqli 准备好的语句,使用绑定参数插入 NULL

】mysqli准备好的语句,使用绑定参数插入NULL【英文标题】:mysqlipreparedstatements,insertNULLusingbindparams【发布时间】:2011-06-2216:41:00【问题描述】:有谁知道是否可以使用MYSQLIbind_param将NULL插入列中。我有一种情况,有时我想在bind_pa... 查看详情

使用准备好的语句将java数组值插入mysql

】使用准备好的语句将java数组值插入mysql【英文标题】:insertingjavaarrayvaluesintomysqlbyusingpreparedstatement【发布时间】:2014-05-1311:13:27【问题描述】:嗨,朋友们在我的代码中,我通过使用JSP页面中的request.getParameterValues()以数组的... 查看详情

如何使用准备好的语句将表单数据插入 PDO?

】如何使用准备好的语句将表单数据插入PDO?【英文标题】:HowtoinsertformdataintoPDOusingpreparedstatements?【发布时间】:2017-11-2923:47:42【问题描述】:所以我从w3schools学到了这一点。..然而,该示例使用直接注入代码的数据。我想知... 查看详情

如何为java准备好的语句插入使用表名变量[重复]

】如何为java准备好的语句插入使用表名变量[重复]【英文标题】:Howtouseatablenamevariableforajavapreparedstatementinsert[duplicate]【发布时间】:2012-07-0322:59:58【问题描述】:我正在使用javaPreparedStatment对象来构造一系列批处理的INSERT查询... 查看详情

插入带有准备好的语句的日期时间[重复]

...【发布时间】:2012-07-0822:38:08【问题描述】:我正在尝试使用准备好的语句为库应用程序插入日期时间。这是到目前为止的代码:global$dbh;$query="INSERTINTO`loan`SET`title`=(?),//examplevalue-LordoftheRin 查看详情

在使用准备好的语句执行插入查询后获取自动增量 ID

】在使用准备好的语句执行插入查询后获取自动增量ID【英文标题】:Getautoincrementidafteraninsertqueryperformedwithapreparedstatement【发布时间】:2010-11-2918:13:30【问题描述】:如果我使用带有php和mysqli_*函数的存储过程执行插入查询,有... 查看详情

将字符串参数插入准备好的语句的问题

...据库。我的应用程序通过JDBC和ODBC与之通信。现在我尝试使用准备好的语句。当我插入一个数字(长)参数时,一切正常。当我插入一个字符串参数它不起作用。没有错误消息,但结 查看详情

使用 PDO 准备语句插入多行

】使用PDO准备语句插入多行【英文标题】:InsertmultiplerowswithPDOpreparedstatements【发布时间】:2013-11-0922:08:47【问题描述】:我想知道是否可以使用一个准备好的语句插入多行。以下是我通常如何将一行插入数据库的示例:$params=arr... 查看详情

是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?

】是否可以使用单个准备好的语句插入填充类型为set<text>的列的记录?【英文标题】:Isitpossibletoinsertarecordthatpopulatesacolumnwithtypeset<text>usingasinglepreparedstatement?【发布时间】:2021-01-2009:42:40【问题描述】:当记录包含一... 查看详情

在 pdo 准备好的语句中执行多插入或许多不同的插入更好/更快吗?

...ement?【发布时间】:2016-01-0517:10:22【问题描述】:我需要使用pdo准备语句从php一次将1000-30000行(每个由19个元素组成)插入到mysql表中。我在问自己是做许多不同的插入还是一 查看详情

什么相当于 mysql_insert_id();使用准备好的语句?

】什么相当于mysql_insert_id();使用准备好的语句?【英文标题】:Whatisequivalentofmysql_insert_id();usingpreparedstatement?【发布时间】:2012-04-0223:13:00【问题描述】:我已经使用准备好的语句将订单插入到订单表中,但现在我想根据插入到... 查看详情

准备好的语句不插入[关闭]

】准备好的语句不插入[关闭]【英文标题】:PreparedStatementdoesnotinsert[closed]【发布时间】:2013-12-2412:02:27【问题描述】:我是JDBC新手,正在尝试以下代码。找不到其中的错误:tryConnectioncon=ConnectionProvider.getCon();stmt=con.prepareStatement... 查看详情

为准备好的语句创建插入查询

】为准备好的语句创建插入查询【英文标题】:Covertinginsertquerytoapreparedstatment【发布时间】:2020-10-2700:53:42【问题描述】:我一直在努力处理这个插入查询,因为它不起作用并且没有给出任何错误,但是类似的查询在其他表中工... 查看详情

准备好的语句中的占位符

...间】:2020-08-2210:52:00【问题描述】:我在准备好的语句中使用以下查询。之前我在过程中使用并使用可调用但现在我试图在jdbc准备语句中使用选择查询。我知道在preparestatement中我们写insertintoabcvalues(?,?,?);但在这里我有插入选择... 查看详情

单例连接 + 单例准备好的语句

...器实现一个服务器。我得出的结论是,我的所有查询都将使用准备好的语句发送。我将为不同的目的制作多个单例准备语句(例如,选择令牌、插入/替换令牌、插入电话号码......)。这是我的问题。为了使单例预处理语句表现... 查看详情

如果我总是在准备好的语句中使用 varchar 设置 null 会发生啥?

】如果我总是在准备好的语句中使用varchar设置null会发生啥?【英文标题】:WhatwouldhappenifIsetnullinpreparedstatementwithvarcharalways?如果我总是在准备好的语句中使用varchar设置null会发生什么?【发布时间】:2009-07-3122:57:17【问题描述】... 查看详情

PHP:准备好的语句

...程序的在线高分列表。该站点几乎已启动并正在运行,它使用准备好的语句从用户应用程序中插入名称和分数。但是在使用准备好的语句从数据库中获取数据时,我遇到了一个问题。这是我获取显示的代码:$display=$db->prepare("S... 查看详情