Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果第一次搜索未返回结果,请在SQL中对另一列再次搜索_Php_Mysql_Pdo - Fatal编程技术网

Php 如果第一次搜索未返回结果,请在SQL中对另一列再次搜索

Php 如果第一次搜索未返回结果,请在SQL中对另一列再次搜索,php,mysql,pdo,Php,Mysql,Pdo,我正在数据库上做一个简单的搜索,并将结果返回到一个PHP文件以显示在屏幕上。 我正在使用下面的代码 // CONNECT TO DATABASE try { $pdo = new PDO( "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME, DB_USER, DB_PASSWORD, [ PDO::ATTR_ERRMODE =&

我正在数据库上做一个简单的搜索,并将结果返回到一个PHP文件以显示在屏幕上。 我正在使用下面的代码

// CONNECT TO DATABASE
try {
  $pdo = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// SEARCH
// $stmt = $pdo->prepare("SELECT * FROM `users` WHERE `name` LIKE ? OR `AMKA_anchor_MEMBER` LIKE ?");
$stmt = $pdo->prepare("SELECT * FROM `teachers` WHERE `AMKA` LIKE ?");
// $stmt->execute(["%".$_POST['search']."%", "%".$_POST['search']."%"]);
$stmt->execute(["%".$_POST['search']."%"]);

//Empty Results? Need to search again for Anchored AMKA.
if ($stmt->rowCount() = 0) {
    $stmt = $pdo->prepare("SELECT * FROM `teachers` WHERE `AMKA_anchor_MEMBER` LIKE ?");
    $stmt->execute(["%".$_POST['search']."%"]);
}

$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) { echo json_encode($results); }
我有一个if语句

如果($stmt->rowCount()=0){…等

如果我删除该语句,搜索工作正常。它会得到结果,我可以在屏幕上显示它们。但如果第一个查询返回空,我想进行第二次搜索,以检查搜索字符串是否在另一列(AMKA_anchor_成员)上找到。当我尝试这样做时,整个搜索都不起作用。我需要这样做来显示一条特殊消息,如“未找到用户。正在搜索直系亲属”,然后显示第二次查询的结果

您将看到我尝试使用或进行查询,但这并没有生成我想要的消息。只是结果,但无法判断它们是否是在第二次尝试时生成的


我坚持这样做。有什么想法吗?

我采取了不同的方法,决定在数据库中完成整个过程,并实际返回2列。以下是我的解决方案:

// CONNECT TO DATABASE
try {
  $pdo = new PDO(
    "mysql:host=".DB_HOST.";charset=".DB_CHARSET.";dbname=".DB_NAME,
    DB_USER, DB_PASSWORD, [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
} catch (Exception $ex) { exit($ex->getMessage()); }

// SEARCH
$stmt = $pdo->prepare("SELECT CONCAT(p.AMKA,', ',p.lastname,', ',p.name,', ',p.sullogos,', ',p.telephone,', ',p.school) AS 'Teacher' 
                        FROM teachers p 
                        WHERE p.AMKA LIKE ? 
                        AND p.AMKA_anchor_MEMBER LIKE ?");
$stmt->execute(["%".$_POST['search']."%", "%".$_POST['search']."%"]);

if ($stmt->rowCount() == 0) {
    $stmt = $pdo->prepare("SELECT CONCAT(p.AMKA,', ',p.lastname,', ',p.name) AS 'Person',
                            CONCAT('Συγγενής πρώτου βαθμού του: ',t.lastname,',',t.name,' με ΑΜΚΑ: ', t.AMKA,' Σχολείο: ',t.school) AS 'Teacher'
                            FROM teachers p
                            INNER JOIN teachers t ON p.AMKA_anchor_MEMBER = t.AMKA
                            WHERE p.AMKA LIKE ?
                            ORDER BY Person");
    $stmt->execute(["%".$_POST['search']."%"]);
}

$results = $stmt->fetchAll();
if (isset($_POST['ajax'])) { echo json_encode($results); }

我真的错过了if语句中的双等号。我应该注意到这一点,但谢谢你指出。另外……当然我应该使用内部连接……我只需要轻轻一推就可以考虑了。

$stmt->rowCount()=0
应该是
$stmt->rowCount()==0
。您正在尝试分配,而不是比较。为什么不使用一个查询,使用左连接?我做了一个查询,检查如下:SELECT*FROM
users
WHERE
name
like?或
AMKA\u anchor\u MEMBER
like?但我想找到一种方法,在第二列匹配时获取消息。您是bo吗右连接和左连接实际上给了我一个不同方法的想法。谢谢。我将在下面发布我的答案。