`
waiting
  • 浏览: 234840 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

PHP PDO prepare/execute 对拼接字段的问题

    博客分类:
  • PHP
 
阅读更多

修改DZ使用pgsql,数据库日志里面一个错误:

 

错误: 无效的整数类型输入语法: "192.168.0.5"
语句: SELECT s.sid, s.styleid, ...
FROM sessions s, members m
WHERE m.uid=s.uid AND s.sid='A3RO' AND (s.ip1 || '.' || s.ip2 || '.' || s.ip3 || '.' || s.ip4)=$1 AND m.uid=$2
AND m.password=$3 AND m.secques=$4
 

查看代码:

 

$sth = $dbh->prepare("SELECT s.sid, s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews, s.lastolupdate, s.seccode, $membertablefields
  FROM {$tablepre}sessions s, {$tablepre}members m
  WHERE m.uid=s.uid AND s.sid='$sid' AND 
        (s.ip1 || '.' || s.ip2 || '.' || s.ip3 || '.' || s.ip4)=? AND m.uid=?
			AND m.password=? AND m.secques=?");
 

 

经过测试,对于 (s.ip1 || '.' ... s.ip4) 这样的拼接字段不能绑定数据去preare。修改为如下后解决:

$sth = $dbh->prepare("SELECT s.sid, s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews, s.lastolupdate, s.seccode, $membertablefields
  FROM {$tablepre}sessions s, {$tablepre}members m
  WHERE m.uid=s.uid AND s.sid='$sid' AND 
      (s.ip1 || '.' || s.ip2 || '.' || s.ip3 || '.' || s.ip4)='$onlineip' AND m.uid=?
	AND m.password=? AND m.secques=?");
 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    PHP程序设计-3期(KC016) 5.1.4修改数据常见问题.docx

    以下是对这些问题的详细分析: 问题1:未获取主键就尝试修改数据 在数据库操作中,主键是用于唯一标识一条记录的关键字段。在修改数据时,首先需要通过某种方式获取到待修改记录的主键值。常见的做法是通过查询...

    PHP-CRUD:简单的 PHP PDO CRUD

    预处理语句能防止SQL注入,因为参数是在执行时绑定的,而不是作为字符串拼接的一部分。事务处理则确保一系列数据库操作要么全部成功,要么全部回滚,确保数据一致性。 ```php $conn->beginTransaction(); try { //...

    PHP MySQL编程

    $e->getMessage(), 3, "/var/log/php_errors.log"); ``` #### 六、性能优化技巧 为了提高PHP与MySQL组合的性能,可以从以下几个方面进行优化: 1. **索引** 为经常用于查询条件的字段创建索引,可以极大地提高...

    PHP基于PDO扩展操作mysql数据库示例

    注意,这里使用了`md5()`函数对某些字段进行哈希处理。最后,将整个INSERT语句执行一次。 总结一下,PHP的PDO扩展提供了以下关键知识点: 1. **连接数据库**:通过PDO构造函数建立连接,指定DSN、用户名和密码。 2...

    PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】

    本篇文章中,将通过一个操作类的介绍来探索如何利用PHP的PDO扩展来实现对SQLite数据库的增删改查以及事务处理等操作。 首先,PDO是PHP的一个数据库访问抽象层,它支持一系列的数据库,包括SQLite、MySQL、Oracle等...

    PHP程序设计-3期(KC016) 5.2.5条件查询拓展知识.doc

    PDO的预处理语句可以通过`prepare`方法创建,然后使用`execute`执行。预处理语句可以有效地防止SQL注入,并且允许我们绑定变量到查询中的占位符。在处理查询结果时,`bindColumn`方法允许我们将结果集中的列绑定到...

    PHP实现多关键词查询

    $stmt = $pdo->prepare("SELECT * FROM table_name WHERE column_name LIKE ? AND column_name LIKE ?"); $stmt->execute(array('%' . $keywords[0] . '%', '%' . $keywords[1] . '%')); $results = $stmt->fetchAll...

    PHP中SQL注入式攻击的实现与防范.pdf

    - **参数化查询/预编译语句**:使用预编译的SQL语句,如PHP的PDO(PHP Data Objects)库中的prepare()和execute()方法,可以确保用户输入的数据被当作值处理,而非SQL命令的一部分。 - **输入验证**:对用户输入...

    删除文章的链接源码

    // 拼接SQL删除语句,假设表名为'articles',字段'article_id'为文章ID,'link'为链接 $sql = "DELETE FROM articles WHERE article_id = :id"; // 准备SQL语句 $stmt = $db->prepare($sql); // 绑定参数,:id将被...

    PHP数据库入浸PHP数据库入浸

    1. 使用预处理语句:预处理语句(如MySQLi的`prepare()`和`PDO`的`prepare()`方法)能有效防止SQL注入,因为它们会将SQL命令和用户输入分开处理。 2. 参数化查询:与预处理语句类似,参数化查询也能分离SQL和用户...

    PHP+Mysql注入工具.rar

    - 使用预处理语句(如MySQLi的`prepare()`和`execute()`,PDO的`prepare()`和`execute()`)。 - 参数化查询,避免直接拼接SQL字符串。 - 输入验证,对用户输入进行限制和清理,如限制长度、类型检查等。 - 错误...

    360提供的Php版的防注入代码文件

    $stmt = $pdo->prepare('SELECT * FROM users WHERE username = ? AND password = ?'); $stmt->execute([$username, $password]); ``` 4. **日志记录**:360的防注入代码提供了记录攻击日志到文本文件的功能。当...

    以数据库字段分组显示数据的sql语句(详细介绍)

    为了安全起见,应该使用预处理语句(`prepare`和`execute`)来执行SQL,而不是直接在查询字符串中插入变量值。 总结来说,`GROUP BY`语句在SQL中用于数据分组,常与聚合函数结合使用,帮助我们理解数据的分布和统计...

    腾讯PHP开发工程师笔试试卷

    预查询(`prepare()`、`execute()`),事务(`BEGIN`、`COMMIT`、`ROLLBACK`),存储过程,触发器,视图各有用途。 8. 数据表类型: 包括InnoDB、MyISAM等,InnoDB支持事务,MyISAM速度快但不支持。 9. 字段类型...

    省市区三级联动

    $stmt = $pdo->prepare('SELECT id, name FROM areas WHERE parent_id = :provinceId'); $stmt->bindParam(':provinceId', $provinceId); $stmt->execute(); $cities = $stmt->fetchAll(PDO::FETCH_ASSOC); echo ...

    PHP中全面阻止SQL注入式攻击

    SQL注入是指攻击者通过将恶意SQL代码插入到应用程序的输入字段中,从而控制数据库的行为。本文将详细介绍如何在PHP中有效地预防和阻止SQL注入攻击。 #### SQL注入的基础概念 SQL注入是一种通过插入恶意SQL语句来...

    PHP——SQL注入测试靶场

    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute...

    PHP insert语法详解

    这里的`表名`是你想要插入数据的数据库表的名称,`字段名1, 字段名2, ...`是你要插入数据的列名,`"字段1的值", "字段2的值", ...`则是对应的值。在PHP字符串拼接中,我们使用双引号包围变量,以确保它们能被正确...

    PHP数据库操作类

    - 预处理语句可以防止SQL注入攻击,通过`prepare()`创建一个预处理语句,然后使用`bind_param()`绑定参数,最后用`execute()`执行。 - `bind_result()`用于绑定结果集中的列到变量。 5. **错误处理**: - 可能...

    php 攻击方法之谈php+mysql注射语句构造

    1. 使用参数化查询(预处理语句),如`PDO`的`prepare()`和`execute()`,或`mysqli`的`prepare()`和`bind_param()`。 2. 对用户输入进行适当的过滤和转义,例如使用`htmlspecialchars()`、`mysqli_real_escape_...

Global site tag (gtag.js) - Google Analytics