[英]How to Migrate Laravel solution from MS SQL Server to MySQL
[英]Migrate PHP code from MySQL to MS SQL Server
我想將php / mysql腳本遷移到php / sql-server。 腳本代碼不是我的,我試圖通過用mysqli_connect()
替換mysqli_connect()
來sqlsrv_connect()
進行破解,但是它無法正常工作。
如何遷移腳本?
腳本源代碼: https : //github.com/fixwa/BlackFramework/tree/master/Lib/xcrud
下面是數據庫配置代碼:
/** Database driver; f0ska xCRUD v.1.6.20; 06/2014 */
class Xcrud_db
{
private static $_instance = array();
private $connect;
public $result;
private $dbhost;
private $dbuser;
private $dbpass;
private $dbname;
private $dbencoding;
private $magic_quotes;
public static function get_instance($params = false)
{
if (is_array($params))
{
list($dbuser, $dbpass, $dbname, $dbhost, $dbencoding) = $params;
$instance_name = sha1($dbuser . $dbpass . $dbname . $dbhost . $dbencoding);
}
else
{
$instance_name = 'db_instance_default';
}
if (!isset(self::$_instance[$instance_name]) or null === self::$_instance[$instance_name])
{
if (!is_array($params))
{
$dbuser = Xcrud_config::$dbuser;
$dbpass = Xcrud_config::$dbpass;
$dbname = Xcrud_config::$dbname;
$dbhost = Xcrud_config::$dbhost;
$dbencoding = Xcrud_config::$dbencoding;
}
self::$_instance[$instance_name] = new self($dbuser, $dbpass, $dbname, $dbhost, $dbencoding);
}
return self::$_instance[$instance_name];
}
private function __construct($dbuser, $dbpass, $dbname, $dbhost, $dbencoding)
{
$this->magic_quotes = get_magic_quotes_runtime();
if (strpos($dbhost, ':') !== false)
{
list($host, $port) = explode(':', $dbhost, 2);
preg_match('/^([0-9]*)([^0-9]*.*)$/', $port, $socks);
$this->connect = mysqli_connect($host, $dbuser, $dbpass, $dbname, $socks[1] ? $socks[1] : null, $socks[2] ? $socks[2] : null);
}
else
$this->connect = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$this->connect)
$this->error('Connection error. Can not connect to database');
$this->connect->set_charset($dbencoding);
if ($this->connect->error)
$this->error($this->connect->error);
if (Xcrud_config::$db_time_zone)
$this->connect->query('SET time_zone = \'' . Xcrud_config::$db_time_zone . '\'');
}
public function query($query = '')
{
$this->result = $this->connect->query($query, MYSQLI_USE_RESULT);
//echo '<pre>' . $query . '</pre>';
if ($this->connect->error)
$this->error($this->connect->error . '<pre>' . $query . '</pre>');
return $this->connect->affected_rows;
}
public function insert_id()
{
return $this->connect->insert_id;
}
public function result()
{
$out = array();
if ($this->result)
{
while ($obj = $this->result->fetch_assoc())
{
$out[] = $obj;
}
$this->result->free();
}
return $out;
}
public function row()
{
$obj = $this->result->fetch_assoc();
$this->result->free();
return $obj;
}
public function escape($val, $not_qu = false, $type = false, $null = false, $bit = false)
{
if ($type)
{
switch ($type)
{
case 'bool':
if ($bit)
{
return (int)$val ? 'b\'1\'' : 'b\'0\'';
}
return (int)$val ? 1 : ($null ? 'NULL' : 0);
break;
case 'int':
$val = preg_replace('/[^0-9\-]/', '', $val);
if ($val === '')
{
if ($null)
{
return 'NULL';
}
else
{
$val = 0;
}
}
if ($bit)
{
return 'b\'' . $val . '\'';
}
return $val;
break;
case 'float':
if ($val === '')
{
if ($null)
{
return 'NULL';
}
else
{
$val = 0;
}
}
return '\'' . $val . '\'';
break;
default:
if (trim($val) == '')
{
if ($null)
{
return 'NULL';
}
else
{
return '\'\'';
}
}
else
{
if ($type == 'point')
{
$val = preg_replace('[^0-9\.\,\-]', '', $val);
}
//return '\'' . ($this->magic_quotes ? (string )$val : $this->connect->real_escape_string((string )$val)) . '\'';
}
break;
}
}
if ($not_qu)
return $this->magic_quotes ? (string )$val : $this->connect->real_escape_string((string )$val);
return '\'' . ($this->magic_quotes ? (string )$val : $this->connect->real_escape_string((string )$val)) . '\'';
}
public function escape_like($val, $pattern = array('%', '%'))
{
if (is_int($val))
return '\'' . $pattern[0] . (int)$val . $pattern[1] . '\'';
if ($val == '')
{
return '\'\'';
}
else
{
return '\'' . $pattern[0] . ($this->magic_quotes ? (string )$val : $this->connect->real_escape_string((string )$val)) .
$pattern[1] . '\'';
}
}
private function error($text = 'Error!')
{
exit('<div class="xcrud-error" style="position:relative;line-height:1.25;padding:15px;color:#BA0303;margin:10px;border:1px solid #BA0303;border-radius:4px;font-family:Arial,sans-serif;background:#FFB5B5;box-shadow:inset 0 0 80px #E58989;">
<span style="position:absolute;font-size:10px;bottom:3px;right:5px;">xCRUD</span>' . $text . '</div>');
}
}
我被黑的代碼:
私有函數__construct($ dbname,$ dbhost,$ dbencoding)
{ $this->magic_quotes = get_magic_quotes_runtime(); if (strpos($dbhost, ':') !== false) { list($host, $port) = explode(':', $dbhost, 2); preg_match('/^([0-9]*)([^0-9]*.*)$/', $port, $socks); $this->connect = sqlsrv_connect($host,$dbname, $socks[1] ? $socks[1] : null, $socks[2] ? $socks[2] : null); } else $this->connect = sqlsrv_connect($dbhost, $dbname); if (!$this->connect) $this->error('Connection error. Can not connect to database'); $this->connect->set_charset($dbencoding); if ($this->connect->error) $this->error($this->connect->error); if (Xcrud_config::$db_time_zone) $this->connect->query('SET time_zone = \\'' . Xcrud_config::$db_time_zone . '\\''); }
在配置文件中:
> // default connection
> public static $dbname = array( "Database"=>"crud1");
> > public static $dbhost = '.\sqlexpress';
您應該使用PDO,特別是如果您希望為應用程序或網站創造更好的未來,但是如果願意,仍然可以使用sqlsrv_*
函數。 無論做什么,請確保替換所有功能並提供正確的參數。
讓我們看看是否要使用SQLSRV函數(我不建議這樣做,但我覺得這是您想要的); 您需要使用其sqlsrv_*
計數器部分更改所有mysqli_*
函數,並再次以正確的形式提供正確的參數:
在構造函數中,您具有:
$this->connect = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
應該替換為:
$this->connect = sqlsrv_connect($dbhost, array( 'Database'=>$dbName, 'UID'=>$dbuser, 'PWD'=>$dbpass));
您可以看到mysqli_connect
調用了4個參數(所有字符串),但sqlsrv_connect
被稱為只有2,(一個字符串數組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.