Пожалуйста, помогите с PHP (получение значения строки и запрос к базе данных)

  • Автор темы Andrey70
  • 56
  • Обновлено
  • 13, May 2024
  • #1
$servername = "локальный хост";

$username = "ххх";

$пароль = "ххх";

$dbname = "ххх";

$productBrand = "$productBrand";

// Создаём соединение

$conn = новый mysqli($servername, $username, $password, $dbname);

// Проверьте подключение

если ($conn->connect_error) {

die("Соединение не удалось: " . $conn->connect_error);

}

$sql = "SELECT * FROM mytable WHERE title LIKE '%$productBrand%' предел 5";

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

если ($result->num_rows > 0) {

//выводим данные каждой строки

while($row = $result->fetch_assoc()) {

эхо'

'. $row['title'].'

';

эхо'

'. $row['id'].'

';

эхо'

'. $row['скидка'].'

';

}

} еще {

эхо «0 результатов»;

}

$conn->закрыть();

?>

Но значение $productBrand не транслируется, как это сделать правильно?

Andrey70


Рег
30 Jun, 2014

Тем
1

Постов
3

Баллов
13
  • 18, May 2024
  • #2
Прежде всего, вам необходимо защитить этот запрос.

Включение непроверенных данных пользователя непосредственно в запрос вызывает проблемы.

И откуда вы берете эту переменную? Вы назначаете $productBrand = "$productBrand" - это не имеет смысла - вы присваиваете существующую переменную тому же имени переменной. Однако, если забыть об этом, запрос должен быть таким: (и в будущем убедитесь, что вы используете код
  или [code=php]  для публикации кода (оберните код в них, просто удалите пробелы)

[code=text]

/* create a prepared statement */

if ($stmt = "SELECT * FROM mytable WHERE title LIKE ? LIMIT 5";)) {

/* bind parameters for markers */

$stmt->bind_param("s", '%'.$productBrand.'%');

/* execute query */

$stmt->execute();

/* bind result variables */

$stmt->bind_result($district);

/* fetch value */

while($row = $stmt->fetch_assoc()) {

echo'<p>'. $row['title'].'</p>

<p>'. $row['id'].'</p>

<p>'. $row['discount'].'</p>';

}

/* close statement */

$stmt->close();

}



PHP: это взято из примера на php.net и быстро изменено с помощью вашего кода, не проверено и может работать не так, как задумано, однако должно дать вам представление.

Я не использую mysqli, поэтому немного не понимаю, как он работает, поэтому некоторые вещи, которые я вставил, МОГУТ не работать, но теоретически должно работать.
 

DeartWolff


Рег
16 Nov, 2011

Тем
0

Постов
1

Баллов
1
  • 20, May 2024
  • #3
Эта проблема также решена:

$pb = $row['productbrand'];

$kw = $row['ключевое слово'];

$strSQL = "SELECT * FROM aircon WHERE id = $abc";

$strSQL = "SELECT * FROM aircon WHERE заголовок типа '%kw%' или заголовок типа '%$pb%' предел 5";

$rs = mysql_query($strSQL);

// Цикл набора записей $rs

while($row = mysql_fetch_array($rs)) {

эхо'

'. $row['title'].'



';

Моя следующая проблема связана с тем, чтобы сделать URL-адрес оптимизированным для SEO........

Я хочу изменить свой текущий URL - mysite.com/product.php?id=5.

к

mysite.com/product.php?id=5 & title=a-product-name

и обрежьте ' & title='и оставьте id=5 как есть, потому что на него ссылаются получения идентификатора для данных.

например $abc = $_GET['id']; и $strSQL = "SELECT * FROM aircon WHERE id = $abc"; Есть ли способ сделать это с моим файлом .htaccess?
 

k1dzo


Рег
28 Apr, 2015

Тем
1

Постов
3

Баллов
13
  • 02, Jun 2024
  • #4
Если $abc = Панасоник и я использую $abc в качестве запроса, он работает для значения Panasonic. Но заголовок не работает, как $title, или товарный бренд не работает, как $productbrand. почему?
 

lastlight


Рег
04 Jul, 2015

Тем
0

Постов
3

Баллов
3
  • 03, Jun 2024
  • #5
Хорошо.

Как это не работает? Вы получаете ошибки? Это просто не дает никаких результатов? Проверьте журналы, включите отображение ошибок, чтобы вы могли видеть предупреждения, уведомления и ошибки и так далее.

Кстати, как значение хранится в базе данных? Хранится ли он как «panasonic» или как «Panasonic» — поиск в SQL по умолчанию не учитывает регистр.
 

noggano77777


Рег
01 Nov, 2012

Тем
2

Постов
4

Баллов
24
  • 05, Jun 2024
  • #6
Я не уверен на 100% в том, что вы говорите... Возможно, вы захотите перефразировать вопрос или привести несколько быстрых примеров кода.

Потому что за этим немного сложно следить. $abc = panasonic ни для чего не подойдет, поскольку panasonic не содержится.

Я предполагаю, что вы имеете в виду $abc = 'panasonic' или $abc = "panasonic"

Когда дело доходит до вашего следующего предложения о том, что не работает, нет никакой разницы между

$abc = 'Панасоник';

или

$title = 'Панасоник';

или

$productbrand = 'Панасоник';

Если последнее не работает, вы можете посмотреть, что на самом деле заложено в эти переменные.

То есть, является ли значение, которое вы присваиваете этим переменным, пустым? Есть ли где-то еще что-то, что создает проблемы?
 

Shell2


Рег
06 Apr, 2014

Тем
1

Постов
4

Баллов
14
  • 07, Jun 2024
  • #7
Конечно, это так - и если это имя столбца в таблице в базе данных, и вы используете его, как указано выше (например, $row['title']), оно должно работать.
 

$servername = "localhost";

$username = "xxx";

$password = "xxx";

$dbname = "xxx";

$productBrand = "$productBrand";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

$stmt = $conn->query("SELECT * FROM mytable WHERE title LIKE ? LIMIT 5");

$stmt->bind_param("s", '%'.$productBrand.'%');

$stmt->execute();

while ($row = $stmt->fetch_assoc()) {

echo'<p>'. $row['title'].'</p>

<p>'. $row['id'].'</p>

<p>'. $row['discount'].'</p>';

}

PHP: Это должно сработать.

Однако вам необходимо убедиться, что в переменной $productBrand действительно есть содержимое.



Извините, но вы спрашиваете об основах работы с базами данных: извлечение данных из базы данных очень просто, и если вы не получаете ожидаемого результата, значит, вы делаете что-то не так, поэтому вы следует включить отображение PHP-ошибок и убедиться, что у вас есть обработчик ошибок подключения к базе данных
 

opozdal


Рег
19 Sep, 2015

Тем
1

Постов
2

Баллов
12
  • 12, Jun 2024
  • #8
Я говорил, что если я определю

$abc = "Панасоник";

и используйте подобную переменную, например:

$strSQL = "SELECT * FROM aircon WHERE заголовок типа '%$abc%'";

оно работает.

Но когда дело доходит до получения значения из базы данных и последующего его использования, это не работает.

Есть ли способ получить только одно значение одного поля, а затем использовать его как строку?
 

Arabeske


Рег
28 May, 2011

Тем
0

Постов
7

Баллов
7
Тем
49554
Комментарии
57426
Опыт
552966

Интересно