Code archives/Miscellaneous/MySQL Database.bb and PHP Handler Script
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| Connect to a MySQL Database via Http Session. Query using SQL and store results in a Table Array. | |||||
;============================
;DATABASE.bb
;============================
Const DATABASE_DAT_MAX%=256
Dim databaseTable$(DATABASE_DAT_MAX,DATABASE_DAT_MAX)
Type database
Field id%
Field datasource$
Field host$
Field SQL$
Field port%
Field folder$
Field filename$
Field post$
Field stream%
Field error$
Field state%
Field count%
Field fields%
Field row%
Field column%
Field dats%
Field dat$[DATABASE_DAT_MAX%]
End Type
Function databaseNew.database()
;Purpose: Creates a Database Object Instance; Sets Defaults (constructor)
;Parameters: None
;Returns: None
this.database=New database
this\id%=1
this\datasource$=""
this\host$=""
this\SQL$ =""
this\port% =80
this\folder$="/"
this\filename$ =""
this\post$ =""
this\stream%=0
this\error$=""
this\state%=0
this\count%=0
this\fields%=0
this\row%=0
this\column%=0
this\dats%=0
Return this
End Function
Function databaseDelete(this.database)
;Purpose: Deletes a Database Object Instance (destructor)
;Parameters: Database Object
;Returns: None
Delete this
End Function
Function databaseCreate.database(host$,datasource$,folder$="/",filename$="database.php")
;Purpose: Creates a Database
;Parameters:
; host$ = Host Name ie: www
; datasource$ = Database name
; folder$ = folder of Database Handler Script
; filename$ = name of Database Handler Script
;Returns: Database Object
this.database=databaseNew()
this\host$=host$
this\datasource$=datasource$
this\folder$=folder$
this\filename$=filename$
Return this
End Function
Function databaseConnect(this.database)
;Purpose: Connects to Host
;Parameters: Database Object
;Returns: Connection Stream
this\stream%=OpenTCPStream(this\host$,this\port)
If Not this\stream% this\error$="Error: Cannot Connect to Database"
Return this\stream%
End Function
Function databaseClose(this.database)
;Purpose: Closes Connection to Host
;Parameters: Database Object
;Returns: None
If this\stream% CloseTCPStream this\stream%
End Function
Function databaseSQL(this.database,sql$)
;Purpose: Sets SQL String Value
;Parameters: Database Object and SQL String
;Returns: None
this\sql$=sql$
End Function
Function databaseQuery(this.database,sql$)
;Purpose: Post SQL String to Host
;Parameters: Database Object and SQL String
;Returns: None, but acquires Query Row and Field counts
this\sql$=sql$
If this\stream%
this\post$=databasehttpurlencodestring$("host="+this\host$+"&datasource="+this\datasource$+"&sql="+this\sql$)
WriteLine this\stream%,"GET "+this\folder$+this\filename$+"?" + this\post$ + " HTTP/1.0"
WriteLine this\stream%,"Host: "+this\host$
WriteLine this\stream%,"User-Agent: Database.bb"
WriteLine this\stream%,"Accept: */*"
WriteLine this\stream%,""
;skip
Repeat
this\error$=ReadLine$(this\stream%)
Until this\error$="results" Or this\error$="error"
;error trap
If this\error$="error"
this\error$="Error: "+ReadLine$(this\stream%)
Else
this\error$=""
EndIf
;Setup Results Array table
this\count%=ReadLine$(this\stream%)
this\fields%=ReadLine$(this\stream%)
EndIf
End Function
Function databaseResultNext(this.database)
;Purpose: Stores Record Results one at a time in DatabaseTable Array.
; This can be useful if you want to increment the storage process within a
; update loop.
;Parameters: Database Object
;Returns: None, but records are stored in DatabaseTable(row,field) Array
If this\stream%
this\row%=this\row%+1
For this\column% = 1 To this\fields%
;this\dats%=this\dats%+1
;this\dat$[this\dats%]=ReadLine$(this\stream%)
databaseTable$(this\row%,this\column%)=ReadLine$(this\stream)
Next
EndIf
End Function
Function databaseResultsAll(this.database)
;Purpose: Stores Record Results All at once in DatabaseTable Array.
;Parameters: Database Object
;Returns: None, but records are stored in DatabaseTable(row,field) Array
If this\stream%
For this\row% = 1 To this\count%
For this\column% = 1 To this\fields%
;this\dats%=this\dats%+1
;this\dat$[this\dats%]=ReadLine$(this\stream)
databaseTable$(this\row%,this\column%)=ReadLine$(this\stream)
Next
Next
EndIf
End Function
Function databasehttpurlencodestring$(post$)
;Purpose: Performs http string encoding
;Parameters: Post String
;Returns: Post String
Restore databasehttpurlencode
Repeat
Read ascii,urlcode
If ascii post$=Replace(post$,Chr(ascii),"%"+Str(urlcode))
Until ascii=0
Return post$
End Function
.databasehttpurlencode
Data 32,20,34,22,39,21,0,0 ;note replaced ' with ! for php compatibility[/codebox]
;============================
;END DATABASE.bb
;============================
<?php //PHP MySQL Handler v.2 F.L.Taylor 11/06/04
/* Connect & Select database */
$connection = mysql_pconnect('localhost','username','password') or die("\nerror\n Could not connect : " . mysql_error());
mysql_select_db($_GET['datasource']) Or die("\nerror\n Could not select database: ".$_GET['datasource']);
/* SQL query */
$result = mysql_query(ereg_replace("!","'",$_GET['sql'])) or die("\nerror\n ".mysql_error());
/* results,row,column */
echo "\nresults\n";
if (is_resource($result)){
echo mysql_num_rows($result)."\n";
echo mysql_num_fields($result)."\n";
/* write results */
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {//rows
foreach ($row as $field) {//columns per row (cells)
echo "$field\n";
}
}
/* Free result */
mysql_free_result($result);
}
/* Closing connection */
mysql_close($connection);
?>
;Example:
database.database=databaseCreate.database("www.yourhost.com","database")
databaseConnect(database)
databaseQuery(database,"SELECT * FROM table")
databaseResultsAll(database)
For row = 1 To database\row%
For fields = 1 To database\fields%
Print databaseTable$(row,fields)
Next
Next |
Comments
| ||
| There is no definition for DatabaseTable in your code. Should be something like: Dim DatabaseTable$(100,100) Where do you redim it in your code? |
| ||
| Sintetik Thanks. The very first Array was mislabeled DatabaseResult instead of DatabaseTable. Its corrected. |
Code Archives Forum