Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
PHP-MySQLi-Database-Class
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kulya
PHP-MySQLi-Database-Class
Commits
c967220e
Commit
c967220e
authored
Aug 08, 2010
by
Jeffrey Way
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First draft
parents
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
298 additions
and
0 deletions
+298
-0
MysqlDb.php
MysqlDb.php
+269
-0
index.php
index.php
+27
-0
readme.txt
readme.txt
+2
-0
No files found.
MysqlDb.php
0 → 100644
View file @
c967220e
<?php
class
MysqlDB
{
protected
$_mysql
;
protected
$_where
=
array
();
protected
$_query
;
protected
$_paramTypeList
;
public
function
__construct
(
$host
,
$username
,
$password
,
$db
)
{
$this
->
_mysql
=
new
mysqli
(
$host
,
$username
,
$password
,
$db
)
or
die
(
'There was a problem connecting to the database'
);
}
/**
*
* @param string $query Contains a user-provided select query.
* @param int $numRows The number of rows total to return.
* @return array Contains the returned rows from the query.
*/
public
function
query
(
$query
,
$numRows
=
NULL
)
{
$this
->
_query
=
filter_var
(
$query
,
FILTER_SANITIZE_STRING
);
$stmt
=
$this
->
_mysql
->
prepare
(
$this
->
_query
);
$stmt
->
execute
();
$results
=
$this
->
_dynamicBindResults
(
$stmt
);
return
$results
;
}
/**
* A convenient SELECT * function.
*
* @param string $tableName The name of the database table to work with.
* @param int $numRows The number of rows total to return.
* @return array Contains the returned rows from the select query.
*/
public
function
get
(
$tableName
,
$numRows
=
NULL
)
{
$this
->
_query
=
"SELECT * FROM
$tableName
"
;
$stmt
=
$this
->
_buildQuery
(
$numRows
);
$stmt
->
execute
();
$results
=
$this
->
_dynamicBindResults
(
$stmt
);
return
$results
;
}
/**
*
* @param <string $tableName The name of the table.
* @param array $insertData Data containing information for inserting into the DB.
* @return boolean Boolean indicating whether the insert query was completed succesfully.
*/
public
function
insert
(
$tableName
,
$insertData
)
{
$this
->
_query
=
"INSERT into
$tableName
"
;
$stmt
=
$this
->
_buildQuery
(
NULL
,
$insertData
);
$stmt
->
execute
();
if
(
$stmt
->
affected_rows
)
return
true
;
}
/**
* Update query. Be sure to first call the "where" method.
*
* @param string $tableName The name of the database table to work with.
* @param array $tableData Array of data to update the desired row.
* @return boolean
*/
public
function
update
(
$tableName
,
$tableData
)
{
$this
->
_query
=
"UPDATE
$tableName
SET "
;
$stmt
=
$this
->
_buildQuery
(
NULL
,
$tableData
);
$stmt
->
execute
();
if
(
$stmt
->
affected_rows
)
return
true
;
}
/**
* Delete query. Call the "where" method first.
*
* @param string $tableName The name of the database table to work with.
* @return boolean Indicates success. 0 or 1.
*/
public
function
delete
(
$tableName
)
{
$this
->
_query
=
"DELETE FROM
$tableName
"
;
$stmt
=
$this
->
_buildQuery
();
$stmt
->
execute
();
if
(
$stmt
->
affected_rows
)
return
true
;
}
/**
* This method allows you to specify a WHERE statement for SQL queries.
*
* @param string $whereProp A string for the name of the database field to update
* @param mixed $whereValue The value for the field.
*/
public
function
where
(
$whereProp
,
$whereValue
)
{
$this
->
_where
[
$whereProp
]
=
$whereValue
;
}
/**
* This method is needed for prepared statements. They require
* the data type of the field to be bound with "i" s", etc.
* This function takes the input, determines what type it is,
* and then updates the param_type.
*
* @param mixed $item Input to determine the type.
* @return string The joined parameter types.
*/
protected
function
_determineType
(
$item
)
{
$param_type
=
array
();
switch
(
gettype
(
$item
))
{
case
'string'
:
$param_type
[]
=
's'
;
break
;
case
'integer'
:
$param_type
[]
=
'i'
;
break
;
}
return
implode
(
$param_type
);
}
/**
* Abstraction method that will compile the WHERE statement,
* any passed update data, and the desired rows.
* It then builds the SQL query.
*
* @param int $numRows The number of rows total to return.
* @param array $tableData Should contain an array of data for updating the database.
* @return object Returns the $stmt object.
*/
protected
function
_buildQuery
(
$numRows
=
NULL
,
$tableData
=
false
)
{
if
(
gettype
(
$tableData
)
===
'array'
)
{
$hasTableData
=
true
;
}
// Did the user call the "where" method?
if
(
!
empty
(
$this
->
_where
))
{
$keys
=
array_keys
(
$this
->
_where
);
$where_prop
=
$keys
[
0
];
$where_value
=
$this
->
_where
[
$where_prop
];
// if update data was passed, filter through
// and create the SQL query, accordingly.
if
(
$hasTableData
)
{
$i
=
1
;
foreach
(
$tableData
as
$prop
=>
$value
)
{
// determines what data type the item is, for binding purposes.
$this
->
_paramTypeList
.=
$this
->
_determineType
(
$value
);
// prepares the reset of the SQL query.
if
(
$i
===
count
(
$tableData
))
{
$this
->
_query
.=
$prop
.
" = ? WHERE "
.
$where_prop
.
"= "
.
$where_value
;
}
else
{
$this
->
_query
.=
$prop
.
' = ?, '
;
}
$i
++
;
}
}
else
{
// no table data was passed. Might be SELECT statement.
$this
->
_paramTypeList
=
$this
->
_determineType
(
$where_value
);
$this
->
_query
.=
" WHERE "
.
$where_prop
.
"= ?"
;
}
}
// Determine if is INSERT query
if
(
$hasTableData
)
{
$pos
=
strpos
(
$this
->
_query
,
'INSERT'
);
if
(
$pos
!==
false
)
{
//is insert statement
$keys
=
array_keys
(
$tableData
);
$values
=
array_values
(
$tableData
);
$num
=
count
(
$keys
);
// wrap values in quotes
foreach
(
$values
as
$key
=>
$val
)
{
$values
[
$key
]
=
"'
{
$val
}
'"
;
$this
->
_paramTypeList
.=
$this
->
_determineType
(
$val
);
}
$this
->
_query
.=
'('
.
implode
(
$keys
,
', '
)
.
')'
;
$this
->
_query
.=
' VALUES('
;
while
(
$num
!==
0
)
{
(
$num
!==
1
)
?
$this
->
_query
.=
'?, '
:
$this
->
_query
.=
'?)'
;
$num
--
;
}
}
}
// Did the user set a limit
if
(
isset
(
$numRows
))
{
$this
->
_query
.=
" LIMIT "
.
(
int
)
$numRows
;
}
// Prepare query
$stmt
=
$this
->
_mysql
->
prepare
(
$this
->
_query
)
or
die
(
'Problem preparing query.'
);
// Bind parameters
if
(
$hasTableData
)
{
$args
=
array
();
$args
[]
=
$this
->
_paramTypeList
;
foreach
(
$tableData
as
$prop
=>
$val
)
{
$args
[]
=
&
$tableData
[
$prop
];
}
call_user_func_array
(
array
(
$stmt
,
'bind_param'
),
$args
);
}
else
{
$stmt
->
bind_param
(
$this
->
_paramTypeList
,
$where_value
);
}
return
$stmt
;
}
/**
* This helper method takes care of prepared statements' "bind_result method
* , when the number of variables to pass is unknown.
*
* @param object $stmt Equal to the prepared statement object.
* @return array The results of the SQL fetch.
*/
protected
function
_dynamicBindResults
(
$stmt
)
{
$parameters
=
array
();
$results
=
array
();
$meta
=
$stmt
->
result_metadata
();
while
(
$field
=
$meta
->
fetch_field
())
{
$parameters
[]
=
&
$row
[
$field
->
name
];
}
call_user_func_array
(
array
(
$stmt
,
'bind_result'
),
$parameters
);
while
(
$stmt
->
fetch
())
{
$x
=
array
();
foreach
(
$row
as
$key
=>
$val
)
{
$x
[
$key
]
=
$val
;
}
$results
[]
=
$x
;
}
return
$results
;
}
}
\ No newline at end of file
index.php
0 → 100644
View file @
c967220e
<?php
require_once
(
'MysqlDb.php'
);
$Db
=
new
MysqlDb
(
'localhost'
,
'root'
,
'root'
,
'db'
);
$insertData
=
array
(
'title'
=>
'Inserted title'
,
'body'
=>
'Inserted body'
);
$results
=
$Db
->
insert
(
'posts'
,
$insertData
);
print_r
(
$results
);
?>
<!DOCTYPE html>
<html
lang=
"en"
>
<head>
<meta
charset=
"utf-8"
>
<title>
untitled
</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
readme.txt
0 → 100644
View file @
c967220e
Coming soon...
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment