相关疑难解决方法(0)

PDO准备好的语句是否足以阻止SQL注入?

假设我有这样的代码:

$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或其他可能的漏洞.

php security pdo sql-injection

631
推荐指数
6
解决办法
20万
查看次数

PHP PDO语句可以接受表名或列名作为参数吗?

为什么我不能将表名传递给准备好的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 pdo

232
推荐指数
5
解决办法
7万
查看次数

exec和php之间的区别

我正在学习php,但在我使用的教程中,我可以看到类似这些行:

$DatabaseAdd->exec('INSERT INTO db_name......
Run Code Online (Sandbox Code Playgroud)

还有这个 :

$request->execute(array(.....
Run Code Online (Sandbox Code Playgroud)

exec和execute之间有什么区别吗?我们可以用一个替换另一个吗?

php execute exec

9
推荐指数
1
解决办法
2万
查看次数

如何将ISO8601 TSQL DATETIME参数与PDO绑定?

似乎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 …

php sql-server odbc pdo iso8601

5
推荐指数
1
解决办法
809
查看次数

准备语句不能使用整数值多次执行

如何使用不同的整数值正确地重新执行预准备语句?

PDO::PARAM_INT重用ODBC预处理语句时,显式和隐式绑定存在严重错误.

CREATE TABLE mytab (
    col INT,
    something VARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)

Works:多个字符串

$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)

Works:单个整数

$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)

php sql-server odbc pdo prepared-statement

5
推荐指数
1
解决办法
810
查看次数