在转移到PDO之前,我通过连接string在PHP中创build了SQL查询。 如果我得到数据库语法错误,我可以回声最后的SQL查询string,在数据库上自己尝试,并调整它,直到我修复错误,然后把它放回到代码。 准备好的PDO语句更快,更好,更安全,但有一件事情让我困扰:我发送到数据库的时候从来没有看到最终的查询。 当我在我的Apache日志或我的自定义日志文件(我logging在catch块内的错误)的语法错误,我看不到造成他们的查询。 有没有办法捕捉由PDO发送到数据库的完整SQL查询并将其logging到文件?
也许有人做了一个教程,显示重要的事情:设置一切,并与MySQL使用它?
我在我的SQL的ORDER BY部分中使用PARAMS有问题。 它不会发出任何警告,但不会打印任何内容。 $order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction"); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->bindParam(':order', $order, PDO::PARAM_STR); $stmt->bindParam(':direction', $direction, PDO::PARAM_STR); $stmt->execute(); :my_param工作,但不是:order或:direction 。 它没有正确的内部转义吗? 我坚持插入它直接在SQL? 像这样: $order = 'columnName'; $direction = 'ASC'; $stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER […]
MySQL, MySQLi和PDO有什么区别? 哪一个最适合与PHP-MySQL一起使用?
此代码出现错误 : 致命错误:调用第42行的C:\ Users \ fel \ VertrigoServ \ www \ login \ validation.php中的非对象的成员函数prepare() 码: function repetirDados($email) { if(!empty($_POST['email'])) { $query = "SELECT email FROM users WHERE email = ?"; $stmt = $pdo->prepare($query); // error line: line 42 $email = mysql_real_escape_string($_POST['email']); $stmt->bindValue(1, $email); $ok = $stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($results == 0) { return […]
我有一个与PDO有关的问题,我很想在被它困扰了很长一段时间之后得到答案。 以这个例子: 我将一个ID数组绑定到一个在MySQL IN语句中使用的PDO语句。 该数组会说: $ values = array(1,2,3,4,5,6,7,8); 数据库安全variables将是$ products = implode(','$ values); 那么, $产品将会是一个值为“1,2,3,4,5,6,7,8”的STRING 声明如下所示: SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN (:products) 当然, 美元产品将被视为:产品 。 但是,当语句被编译并绑定了值时,实际上看起来像这样: SELECT users.id FROM users JOIN products ON products.user_id = users.id WHERE products IN ('1,2,3,4,5,6,7,8') 问题是它执行IN语句内的所有内容作为一个单一的string,因为我已经准备好它作为逗号分隔值绑定到语句。 我真正需要的是: SELECT users.id FROM users […]
我有一个非常简单的帮助函数来生成传统的普通mysql驱动程序用法的SET语句: function dbSet($fields) { $set=''; foreach ($fields as $field) { if (isset($_POST[$field])) { $set.="`$field`='".mysql_real_escape_string($_POST[$field])."', "; } } return substr($set, 0, -2); } 像这样使用 $id = intval($_POST['id']); $fields = explode(" ","name surname lastname address zip fax phone"); $_POST['date'] = $_POST['y']."-".$_POST['m']."-".$_POST['d']; $query = "UPDATE $table SET ".dbSet($fields)." stamp=NOW() WHERE id=$id"; 它使代码相当干爽,简单而灵活。 我想问问,如果有人愿意分享一个类似的function,利用PDO准备报表function? 我仍然在怀疑,如何做到这一点。 有没有一种简单而直接的方法来使用PDO预处理语句来插入数据? 它应该是什么forms? 查询生成器助手? 或插入查询帮手? […]
我正在使用这个代码,我超越了沮丧: try { $dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); } catch(PDOException $e) { … } $stmt = $dbh->prepare('INSERT INTO table(v1, v2, …) VALUES(:v1, :v2, …)'); $stmt->bindParam(':v1', PDO::PARAM_NULL); // –> Here's the problem PDO::PARAM_NULL, null, '',他们都失败了,并抛出这个错误: 致命错误 :无法在/ opt /中通过引用传递参数2 …
又一个晚上,另一个问题! 我创build了一个login页面,如果密码是纯文本,那么这个页面就可以正常工作。 我的问题是,我的registry单使用password_hashinput一个encryption的密码到表中。 我目前的脚本如下。 注册脚本 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); login脚本 <?php session_start(); if(isset($_POST['email'], $_POST['password'])){ require('../../../private_html/db_connection/connection.php'); $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = $conn->prepare("SELECT * FROM user_accounts WHERE email=:email AND password=:password"); $query->bindParam(':email', $_POST['email']); $query->bindParam(':password', $_POST['password']); $query->execute(); if($row = $query->fetch()){ $_SESSION['email'] = $row['email']; $_SESSION['first_name'] = $row['first_name']; header("Location: ../../myaccount/myaccount.php"); } else {header("Location:../../login/login.php ");} } ?> […]
我有一个查询,我想要得到最后插入的ID。 字段ID是主键和自动递增。 我知道我必须使用这个声明: LAST_INSERT_ID() 该声明适用于这样的查询: $query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())"; 但是,如果我想使用这个语句得到ID: $ID = LAST_INSERT_ID(); 我得到这个错误: Fatal error: Call to undefined function LAST_INSERT_ID() 我究竟做错了什么?