Передайте переменную PHP в запрос MySQL

0

Что не так с этим кодом? Я получаю пустой массив. Я передаю переменную PHP в запрос, но она не работает; когда я даю hardcoded значение, запрос возвращает результат.

echo $sub1 = $examSubject[$i];
$subType = $examType[$i];
$query = $this->db->query("select dSubject_id from tbl_subject_details where dSubjectCode='$sub1'");
print_r($query->result_array());
  • 2
    Знание того, что находится в $sub1 может помочь - или сделать эхо всего запроса тоже ;-)
  • 0
    @pascal $ sub1 - строка, представляющая имя субъекта
Показать ещё 10 комментариев
Теги:
variables

3 ответа

5
Лучший ответ

Посмотрите "SQL-инъекция".

Я не знаком с $this->db->query; какой драйвер базы данных вы используете? Синтаксис для экранирующих переменных зависит от драйвера к драйверу.

Вот пример PDO:

$preqry = "INSERT INTO mytable (id,name) VALUES (23,?)";
$stmt = $pdo->prepare($preqry);

$stmt->bindparam(1,$name);
$stmt->execute();
  • 1
    +1, прямое цитирование переменной в строку запроса - плохая привычка, которая может привести к неприятностям :)
1

Используется ли это Framework CodeIgniter (из запроса запроса $this- > db- > ). Если да, почему бы вам не попробовать:

$this->db->where('dSubjectCode',$sub1);
$query = $this->db->get('tbl_subject_details');

Если это не сработает, у вас есть ошибка раньше в коде, а $sub1 - это не то, что вы ожидаете.

1

не видя, что вы используете для абстракции уровня базы данных ($ this- > db), здесь скорректированный код из примера 1 из документация mysql_fetch_assoc

<?php
  // replace as you see fit
  $sub1 = 'CS1';

  // replace localhost, mysql_user & mysql_password with the proper details
  $conn = mysql_connect("localhost", "mysql_user", "mysql_password");
  if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
  }

  if (!mysql_select_db("mydbname")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
  }

  $sql = 'SELECT `dSubject_id` ';
  $sql .= 'FROM `tbl_subject_details` ';
  $sql .= "WHERE `dSubjectCode` ='$sub1';";

  $result = mysql_query($sql);

  if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
  }

  if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
  }

  while ($row = mysql_fetch_assoc($result)) {
    echo $row['dSubject_id'];
  }

  mysql_free_result($result);

?>

Дайте мне знать, что такое результат, я предполагаю, что он скажет: 6

  • 0
    @Saranya: какие-нибудь результаты?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню