2011-12-10 11 views
5

मैं अपने php से मेरी लेखकों नहीं मिल सकता है उद्धरणmysql php त्रुटि - बोली प्रणाली

मैं एक उद्धरण तालिका है: आईडी, बोली, सहायता

मैं एक लेखक तालिका है: आईडी, नाम , आदि ...

<?php 

$DB_SERVER = "localhost"; 
$DB_USER = "root"; 
$DB_PASS = ""; 
$DB_NAME = "test"; 
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS); 
mysql_select_db($DB_NAME); 

$sql = mysql_query("SELECT * FROM quotes WHERE id = ".$_GET['id'], $con); 
$row = mysql_fetch_row($sql); 

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 
$row = mysql_fetch_row($sql); 


var_dump($row); 

अब मैं इस त्रुटि मिलती है चेतावनी: mysql_fetch_row() पैरामीटर 1 संसाधन, बूलियन लाइन 14 शून्य पर /var/www/domain.com/php.php में दी गई यह उम्मीद

+0

आप अपनी क्वेरी में कोई त्रुटि जांच नहीं कर रहे हैं। आपको * mysql_query() 'कॉल के बाद * करने की आवश्यकता है। अन्यथा, अगर क्वेरी विफल हो जाती है तो आपकी स्क्रिप्ट टूट जाएगी। यह कैसे करें [मैन्युअल रूप से 'mysql_query() '] (http://php.net/mysql_query) पर या इस [संदर्भ प्रश्न।] में (http://stackoverflow.com/questions/6198104/reference -क्या-एक-सही-कोड-नमूना-उपयोग-द-माइस्क्ल-एक्सटेंशन) –

+2

इसके अलावा, आपके द्वारा दिखाया गया कोड [SQL इंजेक्शन] (http://php.net/manual/en/security] के लिए कमजोर है। database.sql-injection.php)। अपनी लाइब्रेरी की उचित स्वच्छता विधि का उपयोग करें (क्लासिक mysql लाइब्रेरी के लिए 'mysql_real_escape_string() '), या पीडीओ और तैयार कथन पर स्विच करें। –

+0

[mysql_fetch_array() के संभावित डुप्लिकेट को पैरामीटर 1 संसाधन होने की उम्मीद है, चयन में दिए गए बूलियन] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource -बोलियन-दिए गए चयन में) – fuxia

उत्तर

7

आप print_r($row); पहली क्वेरी के बाद आप कुछ की तरह देखेंगे यदि:

Array 
(
    [0] => id 
    [1] => quote 
    [2] => aid 
) 
तो अपने दूसरे प्रश्न पर

आप $row[1] का उपयोग है जो उद्धरण (स्ट्रिंग) और संख्या नहीं।

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 

आप त्रुटि (mysql_error($con) उपयोग करते हुए) आप कुछ देखेंगे गूंज यदि: आप अपने एसक्यूएल वाक्य रचना में एक त्रुटि है

; मैनुअल की जाँच कि अपने MySQL सर्वर संस्करण से मेल खाती है सही वाक्य रचना के बजाय mysql_fetch_row उपयोग mysql_fetch_assoc और सरणी के कुंजी का उपयोग कर स्तंभ का नाम हो जाएगा की के पास 'एक बोली

का उपयोग करने के लिए। इस तरह, डेटा पुनर्प्राप्त करना बहुत आसान है। और अपना कनेक्शन बंद करना न भूलें।

<?php 
$_GET['id'] = 1; 
$DB_SERVER = "localhost"; 
$DB_USER = "root"; 
$DB_PASS = ""; 
$DB_NAME = "test"; 
$con = mysql_connect($DB_SERVER, $DB_USER, $DB_PASS); 
mysql_select_db($DB_NAME); 
$sql = mysql_query("SELECT * FROM quotes WHERE id = " . (int)$_GET['id'], $con); // or you can use the mysql_real_escape_string 
if(!$sql) { 
    echo mysql_error($con); 
} 
$row = mysql_fetch_assoc($sql); 
mysql_free_result($sql); 

$sql = mysql_query("SELECT * FROM author where id = " . (int)$row['aid'], $con); 
if(!$sql) { 
    echo mysql_error($con); 
} 
$row = mysql_fetch_assoc($sql); 
mysql_free_result($sql); 

print_r($row); 
mysql_close($con); 
1

manual से:

mysql_query() त्रुटि पर सफलता पर एक संसाधन, या FALSE देता है।

mysql_query() भी विफल हो जाएगा और अगर उपयोगकर्ता क्वेरी द्वारा संदर्भित तालिका (तालिका) तक पहुंचने की अनुमति नहीं देता है तो FALSE वापस आ जाएगा।

तो बस कुछ त्वरित त्रुटि जाँच करना

$sql = mysql_query("SELECT * FROM author where aid = " . $row[1], $con); 
if ($sql) { 
    $row = mysql_fetch_row($sql); 
} 
else { 
    //error 
} 
+0

+1। विशिष्ट MySQL त्रुटि प्राप्त करने के लिए आप 'mysql_error ($ con)' को कॉल कर सकते हैं। –