Member 14093672 Ответов: 2

Php PDO - проблема поиска данных


Привет Эверон, мой PDO-скрипт не получает никакого результата и не показывает никаких ошибок.

Пожалуйста, может ли кто-нибудь подсказать мне, какую ошибку я здесь делаю?

Мой файл подключения к БД, никаких ошибок вообще?

<?php


	$db_host = "localhost";
	
	$db_name = "Office_E";
	$db_user = "root";
	$db_pass = "";
	
	try{
		
		$con = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
		$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(PDOException $e){
		echo $e->getMessage();
	}


?>


Что я уже пробовал:

<pre>?php
include 'config.php';

## Read value
$draw = $_POST['draw'];
$row = $_POST['start'];
$rowperpage = $_POST['length']; // Rows display per page
$columnIndex = $_POST['order'][0]['column']; // Column index
$columnName = $_POST['columns'][$columnIndex]['data']; // Column name
$columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
$searchValue = $_POST['search']['value']; // Search value

## Search 
$searchQuery = " ";
if($searchValue != ''){
	$searchQuery = " and (emp_no like '%".$searchValue."%' or 
        first_name like '%".$searchValue."%' or 
        last_name like'%".$searchValue."%' ) ";
}

## Total number of records without filtering - PDO style
// Count Total Records in the table
$totalRecords = $con->query("SELECT count(*) from employees")->fetchColumn();

## Total number of records with filtering - PDO Style
$totalRecordwithFilter = $con->query("SELECT count(*) from employees WHERE 1 ".$searchQuery)->fetchColumn();

## Fetch records - PDO style
$data = array();
// bind values..
$stmt = $con->prepare("select * from employees WHERE 1 ".$searchQuery." order by ".$columnName." ".$columnSortOrder." limit ".$row.",".$rowperpage;);
//$stmt->bindParam(1, $start,PDO::PARAM_INT);
//$stmt->bindParam(2, $end,PDO::PARAM_INT);
$stmt->execute();
$data1 = $stmt->fetchAll();

if ($stmt->fetchcolumn() > 0)
{
     
        foreach ($data1 as $row) {
        $data[] = array (
			"emp_no"=>$row['emp_name'],
    		"first_name"=>$row['first_name'],
    		"last_name"=>$row['last_name'],
    		"gender"=>$row['gender'],
    		"hire_date"=>$row['hire_date']
    	);
}
    unset($data1);
    
}

2 Ответов

Рейтинг:
2

Member 14093672

проблема решена путем изменения - с помощью инструментов разработчика и изменения значения следующим образом:

"emp_no"=>$row['emp_name'],

к
"emp_no"=>$row['emp_no'],


Буду признателен за любые предложения по улучшению вышеприведенного кода.


Рейтинг:
0

Patrice T

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Member 14093672

Было бы неплохо, если бы вы поделились своими знаниями и исправили вышеприведенные запросы, так как это было бы весьма полезно и для других зрителей.

не могли бы вы?