【问题标题】:PHP insert not working when using the ' symbol使用'符号时PHP插入不起作用
【发布时间】:2016-06-15 14:03:26
【问题描述】:

我正在尝试使用 mysqli trough PHP 将一些文本插入到我的数据库中。

我的插入语句如下:

$userID="1";
$description="Hi! It's been a while..."; //For example...

$sql = "INSERT INTO projecten (user_ref, description)
VALUES ('$userID','$description')";

if ($conn->query($sql) === TRUE) {
     //redirect to right page
} else {
     //error message...
}

问题: 我总是收到一条错误消息,说“'ts be”附近的 sql 语法有问题输入...

有人知道我能做些什么吗?

提前致谢!

【问题讨论】:

  • 阅读 SQL 转义和预处理语句,它既能解决你的问题,又能防止未来出现大量的安全问题。
  • 不,不要转义你的 sql,现在是 2016 年,使用准备好的 statemtnes。除非你试图进行 sql 注入攻击
  • @PootieTang 你到底是什么意思?
  • @CoderYordi - 请参阅下面 Saty 的回答,当您致电 $conn->prepare() 时,您正在创建一个准备好的语句。当您调用$stmt->bind_param() 时,您正在安全地绑定一个变量。这是将用户输入插入数据库的唯一安全且正确的方法。我建议你试试她/他的例子。

标签: php mysqli insert


【解决方案1】:

使用bind_param它将处理所有这些字符串并防止您形成sql注入

$userID = "1";
$description = "Hi! It's been a while..."; //For example...


$stmt = $conn->prepare("INSERT INTO projecten (`user_ref`, `description`) VALUES (?, ?)");
$stmt->bind_param('is', $userID, $description);

/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);

/* close statement and connection */
$stmt->close();

【讨论】:

  • “是”是干什么用的?
  • 每个字符代表变量的类型。第一个是整数,因此是“i”,第二个是字符串,因此是“s”。 Saty 提供了一个指向 bid_param 页面的链接,该页面将回答您关于其工作原理的问题。
  • @PootieTang 好的,我现在看到链接了 :) 我将检查页面,因为我收到此错误:致命错误:调用 /home 中的非对象上的成员函数 bind_param() /u889413109/public_html/testsite/saveNewProject.php 第 154 行
  • 这意味着您准备好的语句失败。 sql 看起来不错,所以它可能是$conn。执行var_dump($conn); 以查看您的连接是否有效。
  • @PootieTang 这样做有错吗:$stmt->bind_param('sssssssss' 因为我有9个变量,但我真的不知道该用什么......
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2018-04-20
  • 2018-01-28
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多