You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							169 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							169 lines
						
					
					
						
							4.3 KiB
						
					
					
				
								<?php
							 | 
						|
								/* 
							 | 
						|
								version V4.55 3 Jan 2005 (c) 2000-2005  John Lim (jlim@natsoft.com.my).  All rights
							 | 
						|
								reserved.
							 | 
						|
								  Released under both BSD license and Lesser GPL library license. 
							 | 
						|
								  Whenever there is any discrepancy between the two licenses, 
							 | 
						|
								  the BSD license will take precedence. 
							 | 
						|
								Set tabs to 4 for best viewing.
							 | 
						|
								
							 | 
						|
								  Latest version is available at http://adodb.sourceforge.net
							 | 
						|
								
							 | 
						|
								  21.02.2002 - Wade Johnson wade@wadejohnson.de
							 | 
						|
											   Extended ODBC class for Sybase SQLAnywhere.
							 | 
						|
								   1) Added support to retrieve the last row insert ID on tables with
							 | 
						|
									  primary key column using autoincrement function.
							 | 
						|
								
							 | 
						|
								   2) Added blob support.  Usage:
							 | 
						|
										 a) create blob variable on db server:
							 | 
						|
								
							 | 
						|
										$dbconn->create_blobvar($blobVarName);
							 | 
						|
								
							 | 
						|
									  b) load blob var from file.  $filename must be complete path
							 | 
						|
								
							 | 
						|
									  $dbcon->load_blobvar_from_file($blobVarName, $filename);
							 | 
						|
								
							 | 
						|
									  c) Use the $blobVarName in SQL insert or update statement in the values
							 | 
						|
									  clause:
							 | 
						|
								
							 | 
						|
										$recordSet = $dbconn->Execute('INSERT INTO tabname (idcol, blobcol) '
							 | 
						|
										.
							 | 
						|
									   'VALUES (\'test\', ' . $blobVarName . ')');
							 | 
						|
								
							 | 
						|
									 instead of loading blob from a file, you can also load from 
							 | 
						|
									  an unformatted (raw) blob variable:
							 | 
						|
									  $dbcon->load_blobvar_from_var($blobVarName, $varName);
							 | 
						|
								
							 | 
						|
									  d) drop blob variable on db server to free up resources:
							 | 
						|
									  $dbconn->drop_blobvar($blobVarName);
							 | 
						|
								
							 | 
						|
								  Sybase_SQLAnywhere data driver. Requires ODBC.
							 | 
						|
								
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								// security - hide paths
							 | 
						|
								if (!defined('ADODB_DIR')) die();
							 | 
						|
								
							 | 
						|
								if (!defined('_ADODB_ODBC_LAYER')) {
							 | 
						|
								 include(ADODB_DIR."/drivers/adodb-odbc.inc.php");
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								if (!defined('ADODB_SYBASE_SQLANYWHERE')){
							 | 
						|
								
							 | 
						|
								 define('ADODB_SYBASE_SQLANYWHERE',1);
							 | 
						|
								
							 | 
						|
								 class ADODB_sqlanywhere extends ADODB_odbc {
							 | 
						|
								  	var $databaseType = "sqlanywhere";	
							 | 
						|
									var $hasInsertID = true;
							 | 
						|
									
							 | 
						|
									function ADODB_sqlanywhere()
							 | 
						|
									{
							 | 
						|
										$this->ADODB_odbc();
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									 function _insertid() {
							 | 
						|
								  	   return $this->GetOne('select @@identity');
							 | 
						|
									 }
							 | 
						|
								
							 | 
						|
								  function create_blobvar($blobVarName) {
							 | 
						|
								   $this->Execute("create variable $blobVarName long binary");
							 | 
						|
								   return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  function drop_blobvar($blobVarName) {
							 | 
						|
								   $this->Execute("drop variable $blobVarName");
							 | 
						|
								   return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  function load_blobvar_from_file($blobVarName, $filename) {
							 | 
						|
								   $chunk_size = 1000;
							 | 
						|
								
							 | 
						|
								   $fd = fopen ($filename, "rb");
							 | 
						|
								
							 | 
						|
								   $integer_chunks = (integer)filesize($filename) / $chunk_size;
							 | 
						|
								   $modulus = filesize($filename) % $chunk_size;
							 | 
						|
								   if ($modulus != 0){
							 | 
						|
									$integer_chunks += 1;
							 | 
						|
								   }
							 | 
						|
								
							 | 
						|
								   for($loop=1;$loop<=$integer_chunks;$loop++){
							 | 
						|
									$contents = fread ($fd, $chunk_size);
							 | 
						|
									$contents = bin2hex($contents);
							 | 
						|
								
							 | 
						|
									$hexstring = '';
							 | 
						|
								
							 | 
						|
									for($loop2=0;$loop2<strlen($contents);$loop2+=2){
							 | 
						|
									 $hexstring .= '\x' . substr($contents,$loop2,2);
							 | 
						|
									 }
							 | 
						|
								
							 | 
						|
									$hexstring = $this->qstr($hexstring);
							 | 
						|
								
							 | 
						|
									$this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
							 | 
						|
								   }
							 | 
						|
								
							 | 
						|
								   fclose ($fd);
							 | 
						|
								   return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  function load_blobvar_from_var($blobVarName, &$varName) {
							 | 
						|
								   $chunk_size = 1000;
							 | 
						|
								
							 | 
						|
								   $integer_chunks = (integer)strlen($varName) / $chunk_size;
							 | 
						|
								   $modulus = strlen($varName) % $chunk_size;
							 | 
						|
								   if ($modulus != 0){
							 | 
						|
									$integer_chunks += 1;
							 | 
						|
								   }
							 | 
						|
								
							 | 
						|
								   for($loop=1;$loop<=$integer_chunks;$loop++){
							 | 
						|
									$contents = substr ($varName, (($loop - 1) * $chunk_size), $chunk_size);
							 | 
						|
									$contents = bin2hex($contents);
							 | 
						|
								
							 | 
						|
									$hexstring = '';
							 | 
						|
								
							 | 
						|
									for($loop2=0;$loop2<strlen($contents);$loop2+=2){
							 | 
						|
									 $hexstring .= '\x' . substr($contents,$loop2,2);
							 | 
						|
									 }
							 | 
						|
								
							 | 
						|
									$hexstring = $this->qstr($hexstring);
							 | 
						|
								
							 | 
						|
									$this->Execute("set $blobVarName = $blobVarName || " . $hexstring);
							 | 
						|
								   }
							 | 
						|
								
							 | 
						|
								   return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								 /*
							 | 
						|
								  Insert a null into the blob field of the table first.
							 | 
						|
								  Then use UpdateBlob to store the blob.
							 | 
						|
								
							 | 
						|
								  Usage:
							 | 
						|
								
							 | 
						|
								  $conn->Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');
							 | 
						|
								  $conn->UpdateBlob('blobtable','blobcol',$blob,'id=1');
							 | 
						|
								 */
							 | 
						|
								  function UpdateBlob($table,$column,&$val,$where,$blobtype='BLOB')
							 | 
						|
								  {
							 | 
						|
								   $blobVarName = 'hold_blob';
							 | 
						|
								   $this->create_blobvar($blobVarName);
							 | 
						|
								   $this->load_blobvar_from_var($blobVarName, $val);
							 | 
						|
								   $this->Execute("UPDATE $table SET $column=$blobVarName WHERE $where");
							 | 
						|
								   $this->drop_blobvar($blobVarName);
							 | 
						|
								   return true;
							 | 
						|
								  }
							 | 
						|
								 }; //class
							 | 
						|
								
							 | 
						|
								 class  ADORecordSet_sqlanywhere extends ADORecordSet_odbc {	
							 | 
						|
								
							 | 
						|
								  var $databaseType = "sqlanywhere";		
							 | 
						|
								
							 | 
						|
								 function ADORecordSet_sqlanywhere($id,$mode=false)
							 | 
						|
								 {
							 | 
						|
								  $this->ADORecordSet_odbc($id,$mode);
							 | 
						|
								 }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								 }; //class
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								} //define
							 | 
						|
								?>
							 | 
						|
								
							 |