2010-01-04 135 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'中的内容可能会有所帮助 - 或者做整个查询的回应也可以;-) – 2010-01-04 13:17:24

+0

@pascal $ sub1是一个代表主题名称的字符串 – Saranya 2010-01-04 13:21:28

+0

Martin提出的问题是:你会得到什么回声$ SUB1;并echo $查询; – 2010-01-04 13:23:41

回答

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,将一个变量直接引用到查询字符串中是一种坏习惯,它可以让你陷入麻烦:) – 2010-01-04 15:36:12

1

没有看到你的数据库抽象层($这个 - > DB)的确,这里是从例1的调整代码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:任何结果? – 2010-01-05 11:07:38

1

它是你使用的CodeIgniter框架(从$ this-> db-> query语句)。如果是这样,你为什么不尝试:

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

如果这不起作用,你有一个错误在前面的代码和$ SUB1是不是你希望它是什么。