SQL запрос с использованием конкатенации строк - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в php, и у меня есть таблица «ab c», в которой есть столбцы: идентификатор, имя и возраст. Я хочу сделать следующее:

Только если имя введено в поле ввода, соответствующие данные (идентификатор и возраст) должны отображаться с использованием конкатенации строк для построения SQL запроса.

Это для функции поиска

Каким должен быть запрос SQL для этого вопроса?

// Create connection
    $conn = new mysqli($SERVER_NAME, $USER_NAME, $PASSWORD, $DATABASE_NAME);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully";
    

        $sql = " SELECT name, CONCAT(id,'.',age) FROM personene WHERE name = 'VALUE_FROM INPUT_NAME'";

        $result = $conn->query($sql);
        $error = mysqli_error($conn);

        // Store results
        while($row = $result->fetch_assoc()) {
            $data[] = $row;
        }
?>

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<?php if(!empty($error))
    echo "<p style='color:red'>$error</p>";
?>
<p>Please enter the name:</p>
<form action="<?=$_SERVER['PHP_SELF']?>" method="GET">
<input type="input" name="name" value="" />
<br/>
<input type="submit" name="sendbtn" value="Send" />
</form>
<?php
    if(!empty($data)) {
        echo "<h1>Persons:</h1><table border='1'><tr><th>Id</th><th>Firstname</th><th>Age</th></tr>";
        foreach($data as $row) {
            echo "<tr><td>".$row["id"]."</td>";
            echo "<td>".$row["name"]."</td>";
            echo "<td>".$row["age"]."</td></tr>";
        }
        echo "</table>";
    }
    else
        echo "No data available";

        echo '(Query: '.$sql.')';      
?>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Непонятно, зачем вам concatenate поля в запросе SQL, когда явно в html эти поля отображаются в отдельных столбцах. Код, который у вас есть, широко открыт для SQL Injection , поэтому вам нужно подумать об использовании prepared statement для безопасной обработки вводимых пользователем данных.

<?php
    $data=[];
    
    error_reporting( E_ALL );
    
    if( $_SERVER['REQUEST_METHOD']=='GET' && !empty( $_GET['name'] ) ){
    
        $SERVER_NAME='';
        $USER_NAME='';
        $PASSWORD='';
        $DATABASE_NAME='';
        
        
        
        mysqli_report( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
        $conn=new mysqli( $SERVER_NAME, $USER_NAME, $PASSWORD, $DATABASE_NAME );
        
        try{
        
            $sql = 'select `name`, `id`, `age` from `personene` where `name` = ?';
            $stmt=$conn->prepare( $sql );
            $stmt->bind_param('s', $_GET['name'] );
            $stmt->execute();
            $stmt->bind_result( $name, $id, $age);
            
            while( $stmt->fetch() )$data[]=[
                'name'  =>  $name,
                'id'    =>  $id,
                'age'   =>  $age
            ];
            $stmt->free_result();
            $stmt->close();
            $conn->close();
            
        }catch( mysqli_sql_exception $e ){
            exit( $e->getMessage() );
        }

    }
?>

<!DOCTYPE html>
<html>
    <head>
        <title>Fetch user details</title>
    </head>
    <body>
        
        <p>Please enter the name:</p>
        
        <form method='GET'>
            <input type='input' name='name' />
            <br/>
            <input type='submit' name='sendbtn' value='Send' />
        </form>
        
        
        <?php
            if( !empty( $data ) ) {
                echo "
                <h1>Persons:</h1>
                <table border='1'>
                    <tr>
                        <th>Id</th>
                        <th>Firstname</th>
                        <th>Age</th>
                    </tr>";
                    
                foreach( $data as $row ) {
                    echo "
                    <tr>
                        <td>{$row["id"]}</td>
                        <td>{$row["name"]}</td>
                        <td>{$row["age"]}</td>
                    </tr>";
                }
                echo "</table>";
            } else {
                echo "No data available";
            }
        ?>
        
    </body>
</html>
0 голосов
/ 04 августа 2020

Для запроса SQL для поиска записей, связанных с именем, вы должны использовать этот запрос,

select concat('id', '-', 'age') as user_data from abc where name = $REQUEST['search_name'];

ИЛИ вы можете использовать LIKE ( проверьте здесь ) условие для получения записей из таблицы.

select concat('id', '-', 'age') as user_data from abc where name like 
$REQUEST['search_name'];

Вот обновление для вашего кода,

<?php
// Create connection
$conn = new mysqli($SERVER_NAME, $USER_NAME, $PASSWORD, $DATABASE_NAME);
// Check connection
if ($conn->connect_error) {
 die("Connection failed: " . $conn->connect_error);
} 
// echo "Connected successfully";

$data = [];
$sql = "Please submit the form.";

if(isset($_GET['sendbtn']) ) {
  $sql = " SELECT id, name, age FROM personene WHERE name = '". $_GET['name'] ."'";

  $result = $conn->query($sql);
  $error = mysqli_error($conn);

  // Store results
  while($row = $result->fetch_assoc()) {
    $data[] = $row;
  }
}
?>

<!DOCTYPE html>
  <html>
    <head></head>
    <body>
    <?php 
    if(!empty($error))
       echo "<p style='color:red'>$error</p>";
    ?>
    <p>Please enter the name:</p>
    <form action="<?=$_SERVER['PHP_SELF']?>" method="GET">
      <input type="input" name="name" value="" />
      <br/>
      <input type="submit" name="sendbtn" value="Send" />
    </form>
    <?php
      if(isset($data) && !empty($data)) {
        echo "<h1>Persons:</h1><table border='1'><tr><th>Id</th><th>Firstname</th><th>Age</th></tr>";
        foreach($data as $row) {
            echo "<tr><td>".$row["id"]."</td>";
            echo "<td>".$row["name"]."</td>";
            echo "<td>".$row["age"]."</td></tr>";
        }
        echo "</table>";
    } else {
        echo "No data available";
    }
    echo '(Query: '.$sql.')';
?>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...