Php PDO mysql给出的结果与mysql workbench不同

时间:2014-11-03 11:50:55

标签: php mysql pdo

我从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>";

我从另一个工作正常的结果集中得到所有参数($ row [&#39; divs&#39;]和$ row [&#39; name&#39;])。 当我使用$ name var运行查询时,我得到奇怪的结果:

  

阵   (       [0] =&gt;排列           (               [ID] =&gt; 3237               [姓名] =&gt; :名称               [IP] =&gt; :IP               [IP2] =&gt; :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
    )

) 在workbench中运行相同的查询时返回0结果(根本不匹配) 我无法确定可能出现的问题。 谢谢 MOR

1 个答案:

答案 0 :(得分:0)

不要引用占位符,数据库将收到%: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);