在php的sql查询中处理数组


Handling array in sql query for php

尝试创建一个sql查询,该查询接受一个标记数组(最多3个),然后显示与任何这些标记匹配的记录。

到目前为止,我有这个:

<?php
  include "db_conx.php";
  if 
    (!isset ($_POST['tag']))
  {
    $message = 'Please select valid tags';
  }
  try {
    $db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
    $db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $tag = $_POST['tag'];
    $sql = $db_conx->prepare('SELECT DISTINCT p.proposal_id, p.proposal_title, p.description, c.course_title, pt.*, t.tag_title  FROM proposal p 
      LEFT JOIN course_details c on c.course_code = p.course_code
      LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
      LEFT JOIN tag_details t on t.tag_code = pt.tag_code
  WHERE pt.tag_code IN ('.implode(',', '$tag').')');
    $sql->bindParam(':tag', $course, PDO::PARAM_STR);
    $sql->execute();
    $count = $sql->rowCount();
    //$user_record_id = $sql->fetchColumn();
    $prop_tags = $sql->fetchAll(PDO::FETCH_ASSOC);
    // $course_title = $sql->fetchColumn(3);

    if( ! $proposals)
{
    die('<h4><center><p class=text-danger>There are no proposals available for this course</p></center></h4>');

}
  }
  catch(Exception $e)
  {
    die ("Could not connect to the database $mysql_dbname :" . $e->getMessage());
  }
  ?>
  <?php
echo "<h2>Tags Chosen:</h2>";
var_dump($tag);
?>

这是要处理的表单的代码:

 <?php
  include "db_conx.php";
  try
  {
  $db_conx = new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
    $db_conx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $db_conx->prepare('SELECT * FROM tag_details ORDER BY tag_title ASC');
    $stmt->execute();
    //$count = $stmt>rowCount();
    $tags = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    catch(Exception $e)
    {
        /*** if we are here, something has gone wrong with the database ***/
  $e->getMessage();
    }

?>

    <div id="adSearchModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="adSearchModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title">Advanced Search </h4>
            <p class="text-danger"><small>(Select up to 3)</small></p>
          </div>
          <div class="modal-body">
            <form id="adsearchForm" action="Student_AdSearch.php" method="post">
              <div class="control-group">
                <label class="control-label" for="tag_details">Select Tags:</label><p></p>
                <div class="checkbox-new">
                  <?php foreach($tags as $tag): ?>
                  <input name='tag[]' class="checkbox" type="checkbox" value="<?php echo $tag['tag_code'] ?>"><?php echo $tag['tag_title'] ?></p>
                <?php endforeach ?>
              </div>
            </div>
            <input type="hidden" name="user_token" value="<?php echo  $_SESSION['user_token'];  ?>"/>
            <div class="modal-footer">
              <div class="btn-toolbar">
                <button type="button" class="btn btn-default" class="pull-right" data-dismiss="modal">Close</button>
                <input type="hidden" name="form_token" value="<?php echo $form_token; ?>" />
                <input type="Submit" class= "btn btn-primary" value="Submit" />
              </div>
            </div>
          </form>
        </div>
      </div>
    </div>
    </div>

你知道我怎样才能达到我的最终目标吗?

本质上,查询应该返回与这些标记匹配的所有提议。我已经通过手动为sql查询提供3个标记来测试它,这很有效。

提前感谢!

在代码中将$sql更改为:

$sql = $db_conx->prepare('SELECT DISTINCT p.proposal_id, p.proposal_title, p.description, c.course_title, pt.*, t.tag_title  FROM proposal p 
  LEFT JOIN course_details c on c.course_code = p.course_code
  LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
  LEFT JOIN tag_details t on t.tag_code = pt.tag_code
  WHERE pt.tag_code IN (' . implode(',', $tag) .')';
    $prop_tags = $sql->fetchAll(PDO::FETCH_ASSOC);
    // $course_title = $sql->fetchColumn(3);
/*
add this lines
*/
foreach($prop_tags as $info) {
echo implode(' - ', $info) . "<br>";
}