这是我的PHP sql语句,它在var转储时返回false
$password_md5 = md5($_GET['password']);
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)');
$result = $sql->execute(array(
':fullname' => $_GET['fullname'],
':email' => $_GET['email'],
':username' => $_GET['username'],
':password' => $password_md5,
':password_plain' => $_GET['password']));
Run Code Online (Sandbox Code Playgroud) 我在PHP中有一个函数(见底部),它查询MySQL数据库.当我使用以下值时:
使用SQL语句:
SELECT user,
scoreVal AS score,
UNIX_TIMESTAMP(timestamp) AS timestamp
FROM Score
WHERE timestamp >= :from
AND timestamp <= :to
AND map = :map
ORDER BY scoreVal DESC, timestamp ASC
LIMIT :limit
Run Code Online (Sandbox Code Playgroud)
在phpMyAdmin中,我得到以下结果:
但是PHP PDO返回一个空数组.
我到目前为止尝试调试:
由此,我认为这是函数中占位符的一个问题,但是我一直无法找到他们失败的原因.这很可能发生在PHP端,因为MySQL没有错误抛出错误文件.
这是我正在使用的函数,传入的变量是:
我可以连接,但是当谈到准备好的声明时,我得到了错误.有什么不对吗?
码:
// Open connection
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
//check connection
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Create statement object
$stmt = $db->stmt_init();
// sql statement
$sql = "INSERT INTO ch_users ('uid','admin','password','directory','size','format','locationid') VALUES (?, 1, ?, ?, ?, ?, 1)";
// Create a prepared statement
$stmt = $db->prepare($sql) or die($db->error());
Run Code Online (Sandbox Code Playgroud) 我正在使用如下的PDO声明
select * from `admine_user` where `user_id` = ? and passw = ?
$resultfm1 = DB::instance()->prepare($query)->execute
(array($escapedid,$hashedpass))->fetchAll();
Run Code Online (Sandbox Code Playgroud)
我在考虑使用
select * from `admine_user` where `user_id` = :user and passw = :pwd
$resultfm1 = DB::instance()->prepare($query)->execute
(array(":user"=>$escapedid,":pwd"=>$hashedpass))->fetchAll();
Run Code Online (Sandbox Code Playgroud)
以上语句中哪些更好用,可以有效防止SQL注入,因为现在我无法使用 mysql_real_escape_string