2012-07-05 13 views
8

Olası Çoğalt:
PHP: Warning: sort() expects parameter 1 to be array, resource givenmysqli_fetch_assoc() parametresi 1 mysqli_result edilecek, boolean verilen beklediğini

Ben PHP ve MySQL için oldukça yeni ve sadece bu bir çözemiyorum dışarı. Forumun her yerinde arama yaptım ama mantıklı bir cevap bulamadım. Ben aslında mysql_fetch_assoc() kullanıyordum ama ben sadece numaraları arayabilirim ve ben de harfleri ararken hataları aldım. Umarım burada doğru yoldayım. Tüm yardımlarınız için şimdiden teşekkür ederiz!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>"); 
mysqli_select_db($con, $dbname); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = 'SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid'; 

    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc($result); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 
+2

SQL enjeksiyonunu önlemek için '$ _GET ['part']' filtrelemeyi unutmayın. – honyovk

cevap

17

Bu, sonucun bir sonuç olmadığı (ancak bunun yerine bir "yanlış" olduğunda) olur. Yapamam 'ise "$ değişkenleri yorumlayabilir çünkü

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid"; 

tamsayılar (sayılar) ile Çalışıyor, dizeleri ihtiyacınız: Bu çizgiyi Buna

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid'; 

değişmelidir. $ değişkeni tek tırnak içine koymak için

/Tek tırnak ile çalışmak zorunda istiyorum, o zaman php değişkenleri yorumlama CAN NOT, böyle yapmak zorunda kalacaktır:

$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.'; 
+0

Çünkü dizelerin yukarıdaki gibi kaçması gerekiyor. Sadece cevabımı geliştirdim. – Sliq

+0

Çok teşekkür ederim, bu hile yaptı! Herkesin yardımını gerçekten takdir ediyorum! – user1504463

+0

"Bu, sonucun bir sonuç olmadığında (ancak bunun yerine" false "olduğunda olur." Bu gerçekten saniyeler içinde hata ayıklamaya yardımcı oldu. – madhuspot

4

Değişkenler yerine değişkenler yapan SQL deyiminizi tek bir alıntı yapıyorsunuz.

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid"; 
11
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given 

Bu geçirilen ilk parametre gerçek boole (veya demektir yanlış).

İlk parametre $result'dir ve sorguda bir sözdizimi hatası olduğu için false şeklindedir.

" ... WHERE PartNumber = $partid';" 

Doğrudan bir SQL sorgusunda bir istek değişkeni dahil asla başka kullanıcıların Sorgularınızdaki SQL enjekte edebiliyoruz. (SQL injection bakın.)

Sen değişkeni kaçmak gerekir:

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';" 

Hatta, Prepared Statements kullanın.

+0

http://www.macaerospace.info/inventory/test?part=1 sadece bir sayı ararken iyi çalışıyor | http://www.macaerospace.info/inventory/test?part=PN123 çalışmıyor ve bana bir hata hatası veriyor | Ayrıca, çıkış dizesini eklerken bir T-VARIABLE hatası aldım. Güvenlik şu anda benim için büyük bir sorun değil, sadece bu işe başlamak için çalışıyorum ilk olarak – user1504463

0

$usertable geçerli bir tablo değilse veya PartNumber sütun içermiyorsa veya parça numara değilse, kodunuzda ne olur?

Sen $ PartID kaçmak ve bir boolean

2

Mysqli nesne yönelimli programlama yararlanır dönebilirsiniz çünkü ayrıca mysql_fetch_assoc() için belgeyi okumalıdır.onun yerine bu yaklaşımı kullanarak deneyin: Bunu kontrol tripple gerekebilir böylece

function dbCon() { 
     if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false; 
} 

if(!dbCon()) 
exit("<script language='javascript'>alert('Unable to connect to database')</script>"); 
else $con=dbCon(); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = "SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid"; 

    $result=$con->query($sql_query); 
    $row = $result->fetch_assoc(); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 

bana Sorularınız varsa, ben bu kodu test olamazdı bildirin!

+1

SQL sorgunuz geçersiz. Değişkenleri tek bir fiyat dizgesinde kullanamazsınız. – Twister1002

İlgili konular