我使用PHP 5.6.16通过MongoDB驱动程序访问MongoDB 3.2(PHP_mongo-1.6.14-5.6-ts-vc11-x64),我已经能够创建一个几页。
我需要创建一个页面,列出用户输入的文本在MongoDB中注册的员工,例如,名字(MongoDB中的名称字段存储全名)。
使用mongoshell,我可以在以下命令中执行此查询
db.employee.find("name":/Rogerio/)
如果我尝试将全名作为参数传递,从逻辑上讲搜索是有效的(请参阅下面的完整PHP代码)。
<?php
$m = new MongoClient("mongodb://localhost:27017");
$collection = $m->mydb->employees;
echo "<form action='' method=post>";
echo "<input type='text' name='name'>";
echo "<input type=submit name=search value=Search>";
echo "</form>";
if (isset($_POST['search'])){
$name = $_POST['name'];
$employees = $collection->find(array('name' => $name));
echo "<table border=0 rules=rows width=600>";
foreach ($employees as $emp){
echo "<tr>";
echo "<td>{$emp['nome']}</td>";
echo "</tr>";
}
echo "</table>";
}
?>
为了能够搜索名称的一部分,我尝试使用以下代码设置$name
:
$name = "/" . $_POST['name'] . "/";
但它不起作用。
如何将这种参数传递给PHP驱动程序?
答案 0 :(得分:1)
您可以尝试使用
$employees = $collection->find(array('name' => array("$regex" => $name)));
使用此选项,您将使用正则表达式进行搜索,它或多或少等同于MySQL中的“LIKE”语句。
你可以在mongo shell中使用它,如下所示:
db.employee.find({"name":{"$regex": "Rogerio"}})