Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać pól wyboru do pobierania określonych danych z bazy danych

Widzę co najmniej 2 błędy w Twoim kodzie.

  1. wartości tablicy asocjacyjnej $column_names powinny być przekazywane jako nazwy pól, więc zakładam, że nie są one poprawne, ponieważ są w nich spacje (a jak wiem, wordpress domyślnie nie ma takich nazw pól.

  2. jeśli użytkownik dokona wyboru, dodajesz kilka dodatkowych nazw pól, które są przekazywane przez użytkownika, i masz po nich dwukropek, co spowoduje wygenerowanie błędu.

Przepisałbym kod w ten sposób

<?php
$all = false;
$column_names = array('1' => '`field1`', '2' => '`field2`', '3' => '`field3`');
if(isset($_POST['columns'])){
    $column_entries = $_POST['columns'];
    $sql_columns = array();
    foreach($column_entries as $i) {
        if(array_key_exists($i, $column_names)) {
            $sql_columns[] = $column_names[$i];
        }
    }
    $sql_columns[] = "authorss";
    $sql_columns[] = "research_source";
    $sql_columns[] = "research_title";
} else {
    $all = true;
    $sql_columns[] = "*";
}

Również jak powiedziałeś, $wpdb->get_results zwraca już wyniki - tablicę, więc dlatego otrzymujesz błędy. Dodatkowo przed wywołaniem mysql_fetch_assoc lepiej sprawdzić, czy przekazany parametr to reource i czy liczba wierszy nie jest równa 0.

if($result!==false && mysql_num_rows($result)>0){
    while( $row = mysql_fetch_assoc($result)){
        ...
    }
}  

************* ZAKTUALIZUJ **********

zgodnie z ostatnimi zmianami wypróbuj ten kod:

<?php
$all = false;
$column_names = array('1' => '`authorss`', '2' => '`research_source`', '3' => '`research_title`');
if(isset($_POST['columns'])){
    $column_entries = $_POST['columns'];
    $sql_columns = array();
    foreach($column_entries as $i) {
        if(array_key_exists($i, $column_names)) {
            $sql_columns[] = $column_names[$i];
        }
    }
} else {
    $all = true;
    $sql_columns[] = "authorss";
    $sql_columns[] = "research_source";
    $sql_columns[] = "research_title";
}

global $wpdb;

//DNI CHECKBOX + ALL
$tmp = $wpdb->get_results( "SELECT ".implode(",", $sql_columns)." FROM wp_participants_database"); 


echo "<table border='1' style='width:450px'>
    <tr>
    <th>authorss</th>
    <th>research_source</th>
    <th>research_title</th>";
foreach($column_names as $k => $v) { 
    if($all || (is_array($column_entries) && in_array($k, $column_entries)))
        echo "<th>$v</th>";
}
echo "</tr>";

if(count($tmp)>0){
    for($i=0;$i<count($tmp);$i++){
        echo "<tr>";  
            foreach($tmp[$i] as $key=>$value){
                echo "<td>" . $value . "</td>";   
            }
            foreach($column_names as $k => $v) { 
                if($all || (is_array($column_entries) && in_array($k, $column_entries))) {
                    echo "<th>".$row[$v]."</th>";
                }
            }
        echo "</tr>";
    }
}

echo '</table>';
?>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień hasło użytkownika mysql za pomocą wiersza poleceń

  2. Prawidłowy sposób przekazywania od 5000 do 100 000 wartości w klauzuli mysql WHERE

  3. Jak mogę dodawać komentarze w MySQL?

  4. Ciągłe przesyłanie strumieniowe losowego dźwięku z bazy danych

  5. Mysql aktualizuje wiersz o inną wartość wiersza w tej samej tabeli