我从mysql切换到了pdo。我有以下代码:
$stmt_serverl = $db->prepare("SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE '%:name%'");
if ($row['divs'] == 1) {
$date_compare = new DateTime('2014-10-15 11:11:10');
if ($dt > $date_compare) {
$name = explode('@',strtolower($row['name']));
print_r($name);
$full_name = $name[0]."-".$name[1].$name[2];
$stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR);
}
else {
$name = explode('@',strtolower($row['name']));
print_r($name);
$full_name = $name[0]."-".$name[1]."-".$name[2];
$stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR);
}
}
elseif ($row['divs'] == 2) {
$name = explode('@',strtolower($row['name']));
print_r($name);
$full_name = $name[0].$name[1]."-".$name[2];
$stmt_serverl->bindValue(':name', $name[0], PDO::PARAM_STR);
}
$dt = null;
$stmt_serverl->execute();
$result = null;
$result = $stmt_serverl->fetchAll();
// println($query_serverl, $debug, $logfile);
echo "<pre>";
print_r($result);
echo "</pre>";
我从另一个结果集中得到所有的params($row〔'divs〕和$row〔'name〕),这很好。当我使用$name var运行查询时,我得到了奇怪的结果:
阵列([0]=>数组([ID]=>3237[名称]=>:名称[IP]=>:IP[IP2]=>:IP2)
[1] => Array
(
[ID] => 3236
[Name] => :Name
[IP] => :IP
[IP2] => :IP2
)
[2] => Array
(
[ID] => 3235
[Name] => :Name
[IP] => :IP
[IP2] => :IP2
)
[3] => Array
(
[ID] => 3234
[Name] => :Name
[IP] => :IP
[IP2] => :IP2
)
)在工作台中运行相同的查询时返回0个结果(根本不匹配)我想不出问题出在哪里。谢谢mor
不要引用占位符,数据库将接收%:name%
作为值。
将SQL更改为:
SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE :name
然后调整绑定:
$stmt_serverl->bindValue(':name', '%'.$name[1].'%', PDO::PARAM_STR);
或者,您可以在SQL本身中进行连接:
SELECT ID, Name, IP, IP2 FROM serverl WHERE LOWER(Name) LIKE CONCAT ('%', :name , '%')
然后以当前绑定方式进行绑定:
$stmt_serverl->bindValue(':name', $name[1], PDO::PARAM_STR);