如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
console.log("double"); VS console.log('single');
在处理字符串时,我看到越来越多的JavaScript库使用单引号.使用其中一个的原因是什么?我以为它们几乎可以互换.
在这里阅读了几个关于SQL问题的答案和评论后,还听到我的一个朋友在一个禁止它们的政策的地方工作,我想知道在MySQL中使用反引号是否有任何问题.
那是:
SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...
Run Code Online (Sandbox Code Playgroud) 您可能会注意到我的上一个问题,问题导致了一些问题,在MySQL监视器中阅读MySQL手册?
我的数据库现在无法使用,部分原因是我有兴趣破解和无法查看错误消息.我知道我不应该重用主键,但是我想在删除我恶化的数据库之后再次使用它们.所以
如何正确删除MySQL数据库?
我正在开发一个项目,其他开发人员创建了一个列名为的表'Business Name'.这是两个单词之间的空格.如果我SELECT使用"商家名称" 运行声明,则表示没有名称为"商家"的列.
我怎么解决这个问题?
我正在尝试使用任何语法,无法思考如何正确地写这个:
Schema::table('users', function(Blueprint $table){
$sql = <<<SQL
ALTER TABLE 'users' MODIFY 'age' DATETIME
SQL;
DB::connection()->getPdo()->exec($sql);
});
Run Code Online (Sandbox Code Playgroud)
也尝试过
DB::statement('ALTER TABLE \'users\' MODIFY COLUMN DATETIME);
Run Code Online (Sandbox Code Playgroud)
和双引号等.我在运行迁移时总是得到以下信息:
语法错误或访问冲突:1064 SQL语法中有错误; 检查
与您的MariaDB服务器版本对应的手册,以便在''用户'附近使用正确的语法在第1行修改'age'DATETIME'
是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下).
这必须是一个新手的错误,但我没有看到它.以下是我的代码中的代码段:
$mysqli = mysqli_connect($dbCredentials['hostname'],
$dbCredentials['username'], $dbCredentials['password'],
$dbCredentials['database']);
if ($mysqli->connect_error) {
throw new exception( 'Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types
WHERE year = ? AND make = '?' ORDER by model");
$stmt->bind_param('is', $year, $make);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
当我回显$ year和$ make的值时,我看到了值,但是当我运行这个脚本时,我得到一个空值,并且我的日志文件中出现以下警告:
PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
Run Code Online (Sandbox Code Playgroud)
在这种情况下,year在数据库中的类型为int(10),并且我已经尝试传递一个已经转换为int的副本,而make是一个带有utf8_unicode_ci编码的varchar(20).我错过了什么吗?
当我试图在我的表中插入一行时,我收到以下错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ''filename')
VALUES ('san', 'ss', 1, 1, 1, 1, 2, 1, 1, 'sment', 'notes','sant' at line 1
Run Code Online (Sandbox Code Playgroud)
请帮帮我.
mysql> desc risks;
+-----------------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| status | …Run Code Online (Sandbox Code Playgroud) 当我创建一个MySQL表时order,它是成功创建的,但是,当我对它执行任何查询时,它说"error 1064 , syntax error".
当我更改名称时orders,它工作正常.
但我不想改名字.如何对order表执行查询?