Kullanarak SQL JOIN

2 Cevap php

Ben 2 tabloları kullanmak için bu sorguyu almaya çalışırken bir sql noob ben.

tablolar ve sütunlar şunlardır:

person: department_id, name, etc...

department: department_id, dept_name, etc...

Ben kullanıcı bir dept_name tercih edeceği bir 'seçmek' html formu var, ve ben eşleşen department_id her kişiyi dönmek benim php komut dosyası gerekir. İşte benim kod & olduğunu şimdiye kadar sorgulamak, ben herhangi bir yardım appeciate ediyorum.


$search_dept = $_POST['search_dept'];

$conn = odbc_connect($odbc_name, $user_name, $pass_wd);

if ($conn) {
    $query = "SELECT person.* 
                  FROM department 
                  JOIN person 
                  ON department.department_id=person.department_id 
                  WHERE department.name=$search_dept";

    if($result = odbc_exec($conn, $query)) {

    	echo '..stuff';
    	while ($row = odbc_fetch_array($result)) {
    		...echo stuff
    	}
    	echo '...stuff';
    }

    else {
    	echo 'Query was unsuccessful';
    }
}

else {
    echo 'Unable to connect to database';
}

2 Cevap

Her şeyden önce, bu konuda yanlış bir şekilde gidiyoruz. Sen bunu önlemek eğer bir metin türü sütun karşı bir WHERE yan tümcesi yürütmek istemiyorum. Şahsınızda tablo zaten bir yabancı anahtar olarak department_id olduğundan, seçiminizi yapmak için bu değeri kullanmak isteyeceksiniz. Bu seçenekleri 'değerler olarak departman kimlikleri içerecek şekilde seçin eleman değiştirmek zorunda olacağı anlamına gelir.

<!-- Example -->
<select name="dept_id">
    <option value="1">Sales</option>
    <option value="2">Support</option>
    <option value="3">Fulfillment</option>
</select>

Eğer dizinlenmiş bir sütuna karşı infaz olacak beri Yani şimdi, sadece ham seçimi (sağ, bu yüzden endeksli oluyor uygun bir FK yaptın?) Daha hızlı gerçekleşecek değil sadece, ama aynı zamanda tamamen katılmak çıkarmadan olacak! (Hangi sorgunun hızına başka bir destek olduğunu)

// Here is injection-safe code for the ODBC driver
$stmt = odbc_prepare( "SELECT * FROM person WHERE department_id = ?" );
$success = odbc_execute( $stmt, array( $_POST['dept_id'] ) );

// Here is the old, non-secure version, but is db-driver agnostic
$deptId = $_POST['dept_id']; // escape this please!
$query = "SELECT * FROM person WHERE department_id = $deptId";

Bu sorguyu deneyin, aynı zamanda herhangi bir kullanıcı girişi kaçmak için emin olun. Ne kullanıcı sağlayacak eğer:

$_POST['search_dept']= "'; DROP TABLE person;";

Şimdiye kadar hiç userinput itme asla!

$search_dept = mysql_escape_string($_POST['search_dept']); //make sure to escape this! you can use other functions for this as well. I'm not sure if PDO has some.
$query = "SELECT * 
              FROM person 
              JOIN department 
              ON department.department_id=person.department_id 
              WHERE department.name='$search_dept'";