首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量未传递给sql查询

问变量未传递给sql查询
EN

Stack Overflow用户
提问于 2016-06-04 06:04:18
回答 1查看 26关注 0票数 0

我有一个只有2个字段的数据库。第一个是数字列表,第二个是数字的状态。我正在尝试有一个表单,将允许我批量输入数字列表,并更新他们的状态为已使用。我不知道我在哪里搞砸了。任何帮助都是非常感谢的。

PHP

代码语言:javascript
复制
$pin=$_POST['pin'];
$xx=explode("\n", $pin);

$sql="UPDATE new_table SET Status = 'used' WHERE number = '". $pin . "'";
foreach($xx as $pin){
    if($pin!=""){

    $sql.="('".trim($pin)."'),";
    }
}
$sql=substr($sql,0,-1);

$mysql=new mysqli('127.0.0.1', '******', '********', '******');
$mysql->query($sql);
$mysql->close();

}

?>

表单

代码语言:javascript
复制
<html>

<body>
<form method="post">
    <label> Enter Sims (1 for each line)</label>
    <br/>
    <textarea rows="10" cols="100" name="pin" ></textarea>
    <br/>
    <input type="submit" value="save" />
</form>
</body>
</html>
EN

回答 1

Stack Overflow用户

发布于 2016-06-04 06:30:47

Warning:您的代码以及此答案中的代码示例可能容易受到SQL-injection攻击。

假设您的$_POST['pin']包含如下数据(用\n分隔的单个多行字符串):

代码语言:javascript
复制
1234
5678
9012

将其直接放入查询字符串将导致查询:

代码语言:javascript
复制
UPDATE new_table SET Status = 'used' WHERE number = 1234
5678
9012

这将产生语法错误,因此查询将不会被执行。

要理解您的目标,您需要更新这些字段的状态,其中它的number字段是其中一个IN。正确的查询应如下所示:

代码语言:javascript
复制
UPDATE new_table SET Status = 'used' WHERE number IN (1234, 5678, 9012)

要实现这一点,可以使用implode函数。因此,要创建类似于上面查询,您可以更改代码,如下所示:

代码语言:javascript
复制
$pin = $_POST['pin'];
$xx = implode(",", explode("\r\n", $pin));

$sql = "UPDATE new_table SET Status = 'used' WHERE number IN (". $xx . ")";

$mysql=new mysqli('127.0.0.1', '******', '********', '******');
$mysql->query($sql);
$mysql->close();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37624117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档