php - 变量是否需要引用取决于数据库中的类别是否标记为varchar或int?

标签 php mysql sql

例如,假设我的查询是这样的:

$query = "SELECT * FROM statements WHERE user_id_created_by=$users_id";

$user_id是否需要加引号取决于数据库中的类别是varchar还是int?

另外,我不太明白间距是否会影响查询:

这个是不是和上面那个一样:

$query = "SELECT * FROM statements WHERE user_id_created_by = $users_id";

最佳答案

您根本不应该在查询中使用变量。使用准备好的语句来防止 sql 注入(inject),这可能允许攻击者窃取/修改/删除他们想要的任何东西。

PDO 准备语句(带命名参数):

$params = [
  ':id' => $users_id
]
$query = "SELECT * FROM statements WHERE user_id_created_by=:id";
$sth = $dbh->prepare($query);
$sth->execute(array($params);

mysqli 预处理语句:

$stmt = mysqli_prepare($link, "SELECT * FROM statements WHERE user_id_created_by=?")
mysqli_stmt_bind_param($stmt, "s", $users_id);
mysqli_stmt_execute($stmt);

关于查询中的空格,这些应该不会有任何影响。

关于php - 变量是否需要引用取决于数据库中的类别是否标记为varchar或int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818750/

相关文章:

php - 在 php 准备好的语句中传递数组值不起作用

mysql - 检查 MySQL 表是否存在而不使用 "select from"语法?

mysql - 如何从一个查询中提取多个用​​户信息?

PHP do/while 准备语句失败

PHP - 用户登录后,重定向到存储在数据库中的地址

php - 登录表单的mysql错误消息

javascript - 为什么我的 Javascript Ajax 调用没有将值发送到我的 PHP 脚本?

MySql 根据其他列值查询求和行

php - 酒店预订 SQL 查询不起作用

php - 每次加载页面时如何更新 MySQL 表?