2010-01-04 3 views
0

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

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 - строка, представляющая имя темы – Saranya

+0

Вопрос от Мартина: что вы получаете за эхо $ sub1; и echo $ query; –

ответ

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

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

<?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: любые результаты? –

1

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

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

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

Смежные вопросы