I am not very experienced in this field so this is why I am seeking help.
I recently changed hosts and a script stopped working. After moving all files the new hosts said mysql is deprecated, so after doing a bit of search I decided to change mysql with mysqli and that deprecated error was gone. But now I get a new error (error select db). I think I must make adidtional changes to the script to connect mysqli. This is the file I have
<?php
class Model{
var $conn;
public function openDb($dbhost, $dbuser, $dbpass, $dbname, $conn)
{
//echo "Se creo la conexion ";
$conn = mysqli_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysqli');
mysqli_select_db($dbname) or die('Error select db');
mysqli_query("SET NAMES utf8");
return $conn;
}
public function closeDb($conn)
{
mysqli_close($conn);
}
public function query($query)
{
if ($result = mysqli_query($query) or die("Error de Query: </br >" . mysqli_error()."<br/>".$query)) {
//if ($result = mysqli_query($query)) {
} else {
$result = false;
}
return $result;
}
function __construct()
{
$this->openDb(dbhost, dbuser, dbpass, dbname, $conn);
}
//insertGenerico con indedices asiciativos
function insertar($tabla, $datos)
{
$columnas = implode(", ", array_keys($datos));
$valores = implode(", ", $datos);
$query = "INSERT INTO $tabla
($columnas)
VALUES
(" . $valores . ")";
return $this -> query($query);
}
function insertarRelacionArray($tabla, $tablaRelacion, $datos)
{
foreach ($datos as $row) {
$query = "INSERT INTO $tabla
($tablaRelacion[0],$tablaRelacion[2])
VALUES
($tablaRelacion[1],$row)";
//echo '<br>'.$query;
$this -> query($query);
}
}
//getGenerico
function get($tabla, $where = false, $order = false)
{
$query = "SELECT *
FROM $tabla
$where
$order";
return $this -> query($query);
}
//deleteGenerico
function delete($tabla, $id, $idTag = false)
{
if($idTag==false)
$idTag = "id";
$query = "DELETE FROM $tabla
WHERE $idTag = $id";
return $this -> query($query);
}
//update generico
function update($tabla, $datos, $id, $idTag = false)
{
$columnas = array_keys($datos);
$SET = 'SET ';
$i = 0;
foreach ($datos as $key => $value) {
if (next($datos)) {
$SET .= "$key = $value ,";
} else {
$SET .= "$key = $value ";
}
}
if($idTag==false)
$idTag = "id";
$query = "UPDATE $tabla $SET WHERE $idTag = $id;";
return $this -> query($query);
}
}
?>
As described on http://php.net/manual/en/mysqli.select-db.php first parameter should be $link.
bool mysqli_select_db ( mysqli $link , string $dbname )
So change
mysqli_select_db($dbname) or die('Error select db');
to
mysqli_select_db($conn, $dbname) or die('Error select db');
and it should work.
I think that you need to return $conn in your _construct function too, or store it in the object ($this->conn = $conn) so you can use it again.
In addition (thanks to Ki Jéy) you should also update
mysql_query($query)
to
mysqli_query($conn, $query)
and
mysql_real_escape_string($string)
to
mysqli_real_escape_string ($conn, $string)
Related
I need to import data from XLS,CSV file into MySql database using YII 2.0 Framework,
XLS, CSV files contains datas which should to imported to one table in Mysql DB, Please provide any information to proceed.
I hope this will help
public function actionCreate()
{
$model = new Import();
if ($model->load(Yii::$app->request->post()) ) {
$model->file = UploadedFile::getInstance($model, 'file');
if ( $model->file )
{
$time = time();
$model->file->saveAs('csv/' .$time. '.' . $model->file->extension);
$model->file = 'csv/' .$time. '.' . $model->file->extension;
$handle = fopen($model->file, "r");
while (($fileop = fgetcsv($handle, 1000, ",")) !== false)
{
$name = $fileop[0];
$age = $fileop[1];
$location = $fileop[2];
// print_r($fileop);exit();
$sql = "INSERT INTO details(name, age, location) VALUES ('$name', '$age', '$location')";
$query = Yii::$app->db->createCommand($sql)->execute();
}
if ($query)
{
echo "data upload successfully";
}
}
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
I have a ContactsTable.php module and an function like this:
public function getContactsByLastName($last_name){
$rowset = $this->tableGateway->select(array('last_name' => $last_name));
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not find row record");
}
return $row;
}
which is ok, but it only returns one row.
The problem is in my database I have multiple records with the same Last Name, so my question is:
How can I return a set of data?
I tried this:
$where = new Where();
$where->like('last_name', $last_name);
$resultSet = $this->tableGateway->select($where);
return $resultSet;
but it doesn't work.
Your first function should work as you expect, just remove line
$row = $rowset->current();
So, complete function should look like this:
public function getContactsByLastName($last_name){
$rowset = $this->tableGateway->select(array('last_name' => $last_name));
foreach ($rowset as $row) {
echo $row['id'] . PHP_EOL;
}
}
More info you can find in documentation http://framework.zend.com/manual/2.2/en/modules/zend.db.table-gateway.html
You can use the resultset to get array of rows:
public function getContactsByLastName($last_name) {
$select = new Select();
$select->from(array('u' => 'tbl_users'))
->where(array('u.last_name' => $last_name));
$statement = $this->adapter->createStatement();
$select->prepareStatement($this->adapter, $statement);
$result = $statement->execute();
$rows = array();
if ($result->count()) {
$rows = new ResultSet();
return $rows->initialize($result)->toArray();
}
return $rows;
}
Its working for me.
I am having some "Trying to get property of non-object" issue with facebook sign up. The server returns errors related to access_token.
i have error form line 490 and 451. on line 451 i succeed to solve it but i ve still 2 errors from line 490.
the line was fixed by changing if ( $token->access_token ) by if ( $token['access_token'] )
I think the problem is due to codeigniter.
the line 490 is the following one:
private function _token_string()
{
return 'access_token='.$this->_get('token')->access_token;
}
Here is the entire code:
class Facebook_Lib extends CI_Config
{
private $_api_url;
private $_api_key;
private $_api_secret;
private $_errors = array();
private $_enable_debug = FALSE;
function __construct()
{
$this->_obj =$CI =& get_instance();
$this->_obj->load->library('session');
$this->_obj->load->helper('url');
$this->_obj->load->helper('facebook');
$fb_api_id = $CI->db->get_where('settings', array('code' => 'SITE_FB_API_ID'))->row()->string_value;
$fb_api_secret = $CI->db->get_where('settings', array('code' => 'SITE_FB_API_SECRET'))->row()->string_value;
$this->_api_url = $this->_obj->config->item('facebook_api_url');
$this->_api_key = $fb_api_id;
$this->_api_secret = $fb_api_secret;
$this->session = new facebookSession();
$this->connection = new facebookConnection();
}
public function logged_in()
{
return $this->session->logged_in();
}
public function login($scope = NULL)
{
return $this->session->login($scope);
}
public function login_url($scope = NULL)
{
return $this->session->login_url($scope);
}
public function logout()
{
return $this->session->logout();
}
public function user()
{
return $this->session->get();
}
public function call($method, $uri, $data = array())
{
$response = FALSE;
try
{
switch ( $method )
{
case 'get':
$response = $this->connection->get($this->append_token($this->_api_url.$uri));
break;
case 'post':
$response = $this->connection->post($this->append_token($this->_api_url.$uri), $data);
break;
}
}
catch (facebookException $e)
{
$this->_errors[] = $e;
if ( $this->_enable_debug )
{
echo $e;
}
}
return $response;
}
public function errors()
{
return $this->_errors;
}
public function last_error()
{
if ( count($this->_errors) == 0 ) return NULL;
return $this->_errors[count($this->_errors) - 1];
}
public function append_token($url)
{
return $this->session->append_token($url);
}
public function set_callback($url)
{
return $this->session->set_callback($url);
}
public function enable_debug($debug = TRUE)
{
$this->_enable_debug = (bool) $debug;
}
}
class facebookConnection {
// Allow multi-threading.
private $_mch = NULL;
private $_properties = array();
function __construct()
{
$this->_mch = curl_multi_init();
$this->_properties = array(
'code' => CURLINFO_HTTP_CODE,
'time' => CURLINFO_TOTAL_TIME,
'length' => CURLINFO_CONTENT_LENGTH_DOWNLOAD,
'type' => CURLINFO_CONTENT_TYPE
);
}
private function _initConnection($url)
{
$this->_ch = curl_init($url);
curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, TRUE);
}
public function get($url, $params = array())
{
if ( count($params) > 0 )
{
$url .= '?';
foreach( $params as $k => $v )
{
$url .= "{$k}={$v}&";
}
$url = substr($url, 0, -1);
}
$this->_initConnection($url);
$response = $this->_addCurl($url, $params);
return $response;
}
public function post($url, $params = array())
{
// Todo
$post = '';
foreach ( $params as $k => $v )
{
$post .= "{$k}={$v}&";
}
$post = substr($post, 0, -1);
$this->_initConnection($url, $params);
curl_setopt($this->_ch, CURLOPT_POST, 1);
curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post);
$response = $this->_addCurl($url, $params);
return $response;
}
private function _addCurl($url, $params = array())
{
$ch = $this->_ch;
$key = (string) $ch;
$this->_requests[$key] = $ch;
$response = curl_multi_add_handle($this->_mch, $ch);
if ( $response === CURLM_OK || $response === CURLM_CALL_MULTI_PERFORM )
{
do {
$mch = curl_multi_exec($this->_mch, $active);
} while ( $mch === CURLM_CALL_MULTI_PERFORM );
return $this->_getResponse($key);
}
else
{
return $response;
}
}
private function _getResponse($key = NULL)
{
if ( $key == NULL ) return FALSE;
if ( isset($this->_responses[$key]) )
{
return $this->_responses[$key];
}
$running = NULL;
do
{
$response = curl_multi_exec($this->_mch, $running_curl);
if ( $running !== NULL && $running_curl != $running )
{
$this->_setResponse($key);
if ( isset($this->_responses[$key]) )
{
$response = new facebookResponse( (object) $this->_responses[$key] );
if ( $response->__resp->code !== 200 )
{
$error = $response->__resp->code.' | Request Failed';
if ( isset($response->__resp->data->error->type) )
{
$error .= ' - '.$response->__resp->data->error->type.' - '.$response->__resp->data->error->message;
}
throw new facebookException($error);
}
return $response;
}
}
$running = $running_curl;
} while ( $running_curl > 0);
}
private function _setResponse($key)
{
while( $done = curl_multi_info_read($this->_mch) )
{
$key = (string) $done['handle'];
$this->_responses[$key]['data'] = curl_multi_getcontent($done['handle']);
foreach ( $this->_properties as $curl_key => $value )
{
$this->_responses[$key][$curl_key] = curl_getinfo($done['handle'], $value);
curl_multi_remove_handle($this->_mch, $done['handle']);
}
}
}
}
class facebookResponse {
private $__construct;
public function __construct($resp)
{
$this->__resp = $resp;
$data = json_decode($this->__resp->data);
if ( $data !== NULL )
{
$this->__resp->data = $data;
}
}
public function __get($name)
{
if ($this->__resp->code < 200 || $this->__resp->code > 299) return FALSE;
$result = array();
if ( is_string($this->__resp->data ) )
{
parse_str($this->__resp->data, $result);
$this->__resp->data = (object) $result;
}
if ( $name === '_result')
{
return $this->__resp->data;
}
return $this->__resp->data->$name;
}
}
class facebookException extends Exception {
function __construct($string)
{
parent::__construct($string);
}
public function __toString() {
return "exception '".__CLASS__ ."' with message '".$this->getMessage()."' in ".$this->getFile().":".$this->getLine()."\nStack trace:\n".$this->getTraceAsString();
}
}
class facebookSession {
private $_api_key;
private $_api_secret;
private $_token_url = 'oauth/access_token';
private $_user_url = 'me';
private $_data = array();
function __construct()
{
$this->_obj =$CI =& get_instance();
$fb_api_id = $CI->db->get_where('settings', array('code' => 'SITE_FB_API_ID'))->row()->string_value;
$fb_api_secret = $CI->db->get_where('settings', array('code' => 'SITE_FB_API_SECRET'))->row()->string_value;
$this->_api_key = $fb_api_id;
$this->_api_secret = $fb_api_secret;
$this->_token_url = $this->_obj->config->item('facebook_api_url').$this->_token_url;
$this->_user_url = $this->_obj->config->item('facebook_api_url').$this->_user_url;
$this->_set('scope', $this->_obj->config->item('facebook_default_scope'));
$this->connection = new facebookConnection();
if ( !$this->logged_in() )
{
// Initializes the callback to this page URL.
$this->set_callback();
}
}
public function logged_in()
{
return ( $this->get() === NULL ) ? FALSE : TRUE;
}
public function logout()
{
$this->_unset('token');
$this->_unset('user');
}
public function login_url($scope = NULL)
{
$url = "http://www.facebook.com/dialog/oauth?client_id=".$this->_api_key.'&redirect_uri='.urlencode($this->_get('callback'));
if ( empty($scope) )
{
$scope = $this->_get('scope');
}
else
{
$this->_set('scope', $scope);
}
if ( !empty($scope) )
{
$url .= '&scope='.$scope;
}
return $url;
}
public function login($scope = NULL)
{
$this->logout();
if ( !$this->_get('callback') ) $this->_set('callback', current_url());
$url = $this->login_url($scope);
return redirect($url);
}
public function get()
{
$token = $this->_find_token();
if ( empty($token) ) return NULL;
// $user = $this->_get('user');
// if ( !empty($user) ) return $user;
try
{
$user = $this->connection->get($this->_user_url.'?'.$this->_token_string());
}
catch ( facebookException $e )
{
$this->logout();
return NULL;
}
// $this->_set('user', $user);
return $user;
}
private function _find_token()
{
$token = $this->_get('token');
if ( !empty($token) )
{
if ( !empty($token->expires) && intval($token->expires) >= time() )
{
// Problem, token is expired!
return $this->logout();
}
$this->_set('token', $token);
return $this->_token_string();
}
if ( !isset($_GET['code']) )
{
return $this->logout();
}
if ( !$this->_get('callback') ) $this->_set('callback', current_url());
$token_url = $this->_token_url.'?client_id='.$this->_api_key."&client_secret=".$this->_api_secret."&code=".$_GET['code'].'&redirect_uri='.urlencode($this->_get('callback'));
try
{
$token = $this->connection->get($token_url);
}
catch ( facebookException $e )
{
$this->logout();
redirect($this->_strip_query());
return NULL;
}
$this->_unset('callback');
if ( $token['access_token'] )
{
if ( !empty($token->expires) )
{
$token->expires = strval(time() + intval($token->expires));
}
$this->_set('token', $token);
redirect($this->_strip_query());
}
return $this->_token_string();
}
private function _get($key)
{
$key = '_facebook_'.$key;
return $this->_obj->session->userdata($key);
}
private function _set($key, $data)
{
$key = '_facebook_'.$key;
$this->_obj->session->set_userdata($key, $data);
}
private function _unset($key)
{
$key = '_facebook_'.$key;
$this->_obj->session->unset_userdata($key);
}
public function set_callback($url = NULL)
{
$this->_set('callback', $this->_strip_query($url));
}
private function _token_string()
{
return 'access_token='.$this->_get('token')->access_token;
}
public function append_token($url)
{
if ( $this->_get('token') ) $url .= '?'.$this->_token_string();
return $url;
}
private function _strip_query($url = NULL)
{
if ( $url === NULL )
{
$url = ( empty($_SERVER['HTTPS']) ) ? 'http' : 'https';
$url .= '://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
$parts = explode('?', $url);
return $parts[0];
}
}
I am not sure what is going on with this library. On line 451 you are looking in the $token array for the values that got returned and then it goes through a very convoluted way of setting that in the CI session and then instantly call it back from the CI session.
Line 458 sets the token into the session and then on 462 they return it but by calling a method that calls a method that returns session->userdata('token').
That seems to be why its failing on 490 because it gets the value in the session data but then tries finding the data for ->access_token on top of the returned value and that does not exist.
dump out $token before line 462 and see if it is an object or an array. If it's ann array then that would explain why ->access_token on 490 does not work. If it is an object then I would change line 462 to
return 'access_token='.$token->access_token;
or whatever the dump of $token says the value of the object is (I am assuming it is access_token) and see if that works. if it does then you have to figure out why they wrote all these extra steps and what it will be used for. If not, call it good.
Facebook has a library written that is available on github that you can just drop in the library dir in codeigniter and it will work fine. I would suggest dropping this class you are using and just use the one Facebook provides. This way you can learn how to integrate with Facebook right from their developer site and if they ever change their API calls, you do not have to rewrite code; you just replace the two files in the library dir.
https://github.com/facebook/facebook-php-sdk/tree/master/src
Hope this helps.
I recently changed from using mysql to msqli, since then the CRUD functions have all stopped working properly. Please can someone point me in the right direction. Here is my code. sorry for my bad english.
public function create() {
global $database;
$attributes = $this->sanitised_attributes();
$sql = "INSERT INTO ".self::$table_name."(";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
if($database->query($sql)) {
$this->id = $database->insert_id();
return true;
} else {
return false;
}
}
Here is the class
class mysqliDatabase {
private $connection;
public $last_query;
private $magic_quotes_active;
private $real_escape_string_exists;
function __construct() {
$this->open_connection();
$this->magic_quotes_active = get_magic_quotes_gpc();
$this->real_escape_string_exists = function_exists("mysqli_real_escape_string");
}
public function open_connection(){
$this->connection = new mysqli(DB_HOST,DB_USER,DB_PASSWORD);
if(!$this->connection) {
die("Database connection failed: " . mysqli_error());
} else {
$db_select = mysqli_select_db($this->connection,'*****');
if (!$db_select) {
die("Database selection failed: " . mysqli_error());
} else { echo "connected";}
}
}
public function close_connection(){
if(isset($this->connection)) {
mysqli_close($this->connection);
unset($this->connection);
}
}
public function query($sql) {
$this->last_query = $sql;
$result = mysqli_real_query($this->connection, $sql);
$this->confirm_query($result);
return $result;
}
public function escape_value($value) {
if($this->real_escape_string_exists) {
//undo any magic quote effects so mysqli_real_escape can do the work
if($this->magic_quotes_active){ $value = stripslashes($value);}
$value = mysqli_escape_string($this->connection, $value);
} else {
//if magic quotes aren't already on then add slashes manually
if(!$this->magic_quotes_active) { $value = addslashes($value);
}
//if magic quotes are active, then the slashes already exist
}
return $value;
}
public function fetch_array($result_set) {
return mysqli_fetch_array($result_set);
}
public function num_rows($result_set) {
return mysqli_num_rows($result_set);
}
public function insert_id() {
//get the last id inserted over the current db connection
return mysqli_insert_id($this->connection);
}
public function affected_rows() {
return mysqli_affected_rows($this->connection);
}
private function confirm_query($result) {
if(!$result) {
$output = "Database query failed " . mysqli_error($this->connection) . "<br
/><br />";
$output .= "last SQL query: " . $this->last_query;
die($output);
}
}
The problem is not in this function, but in the database class. You would need to share that one to be able to get help.
Can anyone tell me why my expression is not used in the query below?
SELECT accountreset.* FROM accountreset WHERE (reset_id = '34') LIMIT 1
public function findByResetId($resetId, $model = null) {
$result = null;
if (isset($resetId)) {
$select = $this->getDao()->select(
array('expiration' => new Zend_Db_Expr('UNIX_TIMESTAMP(expiration)'))
);
$select->where('reset_id = ?', $resetId);
$row = $this->getDao()->fetchRow($select);
if (null != $row) {
if (!($model instanceof Stage5_Model_PasswordResetter)) {
$model = new Stage5_Model_PasswordResetter();
}
// vul het model object
$model->setResetId($row->reset_id);
$model->setUserId($row->user_id);
$model->setExpiration($row->expiration);
$result = $model;
}
}
return $result;
}
Your Zend_Db_Expr should go into from() method instead of select()
$select = $this->getDao()
->select()
->from(
$this->getDao()->info('name'),
array('expiration' => new Zend_Db_Expr('UNIX_TIMESTAMP(expiration)'))
);