假设我有这样的代码:
$dbh = new PDO("blahblah");
$stmt = $dbh->prepare('SELECT * FROM users where username = :username');
$stmt->execute( array(':username' => $_REQUEST['username']) );
Run Code Online (Sandbox Code Playgroud)
PDO文件说:
准备语句的参数不需要引用; 司机为你处理.
这真的是我需要做的就是避免SQL注入吗?这真的很容易吗?
如果它有所作为,你可以假设MySQL.另外,我真的只是对使用针对SQL注入的预处理语句感到好奇.在这种情况下,我不关心XSS或其他可能的漏洞.
为什么我不能将表名传递给准备好的PDO语句?
$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1');
if ($stmt->execute(array(':table' => 'users'))) {
var_dump($stmt->fetchAll());
}
Run Code Online (Sandbox Code Playgroud)
是否有另一种安全的方法将表名插入SQL查询?安全我的意思是我不想这样做
$sql = "SELECT * FROM $table WHERE 1"
Run Code Online (Sandbox Code Playgroud) 我正在学习php,但在我使用的教程中,我可以看到类似这些行:
$DatabaseAdd->exec('INSERT INTO db_name......
Run Code Online (Sandbox Code Playgroud)
还有这个 :
$request->execute(array(.....
Run Code Online (Sandbox Code Playgroud)
exec和execute之间有什么区别吗?我们可以用一个替换另一个吗?
似乎PDO在ISO 8601格式的时间戳方面存在问题.
我正在使用用于SQLServer®的Microsoft®ODBCDriver 13(预览版)从运行PHP 7.0.8的64位Ubuntu 16.04进行连接
这是我的简单表格:
CREATE TABLE dtest (
"stamp" DATETIME
);
Run Code Online (Sandbox Code Playgroud)
$pdoDB = new PDO('odbc:Driver=ODBC Driver 13 for SQL Server;
Server='.DATABASE_SERVER.';
Database='.DATABASE_NAME,
DATABASE_USERNAME,
DATABASE_PASSWORD
);
$pdoDB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO dtest (stamp) VALUES ('2011-03-15T10:23:01')";
$stmt = $pdoDB->prepare($sql);
$params = [];
$stmt->execute($params);
Run Code Online (Sandbox Code Playgroud)
$sql = "INSERT INTO dtest (stamp) VALUES (?)";
$stmt = $pdoDB->prepare($sql);
$params = ['2011-03-15T10:23:01'];
$stmt->execute($params);
Run Code Online (Sandbox Code Playgroud)
致命错误:未捕获PDOException:SQLSTATE [22018]:强制转换规范的字符值无效:0 [Microsoft] [SQL Server的ODBC驱动程序13]转换规范的字符值无效(/build/php7.0-lPMnpS中的SQLExecute [0] /php7.0-7.0.8/ext/pdo_odbc/odbc_stmt.c:260)
这工作,如果我删除T …
如何使用不同的整数值正确地重新执行预准备语句?
PDO::PARAM_INT重用ODBC预处理语句时,显式和隐式绑定存在严重错误.
CREATE TABLE mytab (
col INT,
something VARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)
$pdoDB = new PDO('odbc:Driver=ODBC Driver 13 for SQL Server;
Server='.DATABASE_SERVER.';
Database='.DATABASE_NAME,
DATABASE_USERNAME,
DATABASE_PASSWORD
);
$pdoDB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$values = ['here','are','some','values'];
$sql = "INSERT INTO mytab (something) VALUES (:something)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
$stmt->execute(['something'=>$value]);
Run Code Online (Sandbox Code Playgroud)
$values = [42];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
$stmt->execute(['col'=>$value]);
Run Code Online (Sandbox Code Playgroud)
$values = [1,3,5,7,11];
$sql = "INSERT INTO mytab (col) …Run Code Online (Sandbox Code Playgroud)