首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >odbc查询中的问题

odbc查询中的问题
EN

Stack Overflow用户
提问于 2012-12-13 20:03:08
回答 1查看 194关注 0票数 0

我有下面的代码,用于登录身份验证部分。这一切都是在mysql中完成的,我尽了最大的努力将其转换成odbc

但是我得到了一个错误:我猜一定是在$row = $query->odbc_assoc();

代码语言:javascript
复制
$connection = odbc_connect("Driver={SQL Server};Server=$host;Database=$database;",$uid, $passVal ) or die("Connection could not established");

$query = $connection->'SELECT Level_access FROM users WHERE ID = "'.$connection->addslashes($_SESSION['user_id']).'"';
$row = $query->odbc_assoc();

$connection->close();

有没有人能检查一下这个,它可能完全写错了。问: mysql_escape_string是否等同于odbc connection中的加斜杠?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-14 12:32:53

问题: odbc连接中的mysql_escape_string等同于加斜杠吗?

不,addslashes从来都不是正确的工具!通过对字符集的简单操作,绕过addslashes创建的简单转义层是非常简单的。这仍然会让您对SQL injection敞开大门。此外,mysql_real_escape_string仅适用于MySQL,并且只有在具有已声明字符集的打开MySQL连接时才能正确运行。

这并没有涉及到你的语法完全是假的这一事实。odbc_connect返回的是资源,而不是对象。试图在它上面调用一个方法,除了杀死脚本之外,什么也不会做。

如果您需要使用OBDC来连接到SQL Server,而不是像sqlsrv extension这样的现代工具,那么至少要通过PDO_ODBC使用PDO。这两个选项都为您提供了prepared statements with parameterized queries,这通常是对SQL注入的有效防御。Sqlsrv的预准备语句在服务器上执行,而PDO是在内部执行的,而不是在服务器上执行。只需确保在连接字符串中传递连接字符集,并确保要传递的所有用户数据都使用正确的字符集,就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13859465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档