我有一个恼人的问题.我正在尝试做一些简单的事情,比如从db获取一个单元格值.这是你可以用db做的最基本的事情...给我一个值,其中有一个具有此值的单元格....
问题是搜索查询包含冒号(:).我在一个准备好的语句的类中使用pdo函数,但没有运气.我已经尝试了一切,甚至将查询分开,因此它不会包含冒号,但仍然没有运气.我试图恢复到mysqli但仍然是相同的结果......
数据表包含诸如title - > Morlanda C:2和sourceID - > S11之类的值.顺便说一句,如果我尝试在phpmyadmin中搜索一个标题,当我寻找Morlanda C:2时,我会得到我想要的东西.
但是当我调用我的函数时,这个:
$sourceID = $sources->sourceAvalibe('Morlanda C:2');
Run Code Online (Sandbox Code Playgroud)
我正在访问我的功能:
public function sourceAvalibe($sourceTitle){
try {
$sql = "SELECT sourceID FROM sources WHERE title=:sourceTitle";
$core = Core::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':sourceTitle', $sourceTitle, PDO::PARAM_STR, 32);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row;
}
Run Code Online (Sandbox Code Playgroud)
那么结果将是空的..
但如果我这样调用函数:
$sourceID = $sources->sourceAvalibe('1910 Massachusetts Census');
Run Code Online (Sandbox Code Playgroud)
结果将返回我正在寻找的东西.
如果查询包含冒号(:),则结果将为空,但如果包含没有冒号(:)的内容,则返回正确的sourceID.
我试图以不同的方式逃脱结肠,但它也不会找到结果.
我去香蕉之前能帮帮我吗???
你好
谢谢你的回答.我正在搜索的数据与数据库中的数据完全相同,使用复制/粘贴.我找了邪恶的白色空间,但没有找到额外的东西.我现在改为使用bindValue.
关于禁用模拟准备语句的评论我的答案是..阙?:)我现在已经找到了关于模拟的内容,在本文中:防止SQL注入的最佳方法是什么?,并更新了我的构造函数类.我仍然得到相同的结果......没什么..
我正在使用此构造函数类进行数据库连接:
class Core {
public $dbh;
private static $instance;
function __construct(){
$this->dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, …Run Code Online (Sandbox Code Playgroud)