Я искал хороший и полный пример того, как динамически привязать несколько параметров запроса к любому запросу SELECT, INSERT, UPDATE и DELETE. Алек упоминает в своем ответе способ привязки результата, для меня функция get_result () после execute () для запросов SELECT работает отлично, и я могу извлечь все выбранные результаты в массив ассоциативные массивы.
Так или иначе, я закончил тем, что создал функцию, в которой я могу динамически связывать любое количество параметров с параметризованным запросом (используя функцию call_user_func_array) и получать результат выполнения запроса. Ниже приведена функция с ее документацией (пожалуйста, прочтите ее перед использованием - особенно важно понять параметр $ paremetersTypes - Type chars )
/**
* Prepares and executes a parametrized QUERY (SELECT, INSERT, UPDATE, DELETE)
*
* @param[in] $dbConnection mysqli database connection to be used for query execution
* @param[in] $dbQuery parametrized query to be bind parameters for and then execute
* @param[in] $isDMQ boolean value, should be set to TRUE for (DELETE, INSERT, UPDATE - Data manipulaiton queries), FALSE for SELECT queries
* @param[in] $paremetersTypes String representation for input parametrs' types as per http://php.net/manual/en/mysqli-stmt.bind-param.php
* @param[in] $errorOut A variable to be passed by reference where a string representation of an error will be present if a FAUILURE occurs
* @param[in] $arrayOfParemetersToBind Parameters to be bind to the parametrized query, parameters need to be specified in an array in the correct order
* @return array of feched records associative arrays for SELECT query on SUCCESS, TRUE for INSERT, UPDATE, DELETE queries on SUCCESS, on FAIL sets the error and returns NULL
*/
function ExecuteMySQLParametrizedQuery($dbConnection, $dbQuery, $isDMQ, $paremetersTypes, &$errorOut, $arrayOfParemetersToBind)
{
$stmt = $dbConnection->prepare($dbQuery);
$outValue = NULL;
if ($stmt === FALSE)
$errorOut = 'Failed to prepare statement for query: ' . $dbQuery;
else if ( call_user_func_array(array($stmt, "bind_param"), array_merge(array($paremetersTypes), $arrayOfParemetersToBind)) === FALSE)
$errorOut = 'Failed to bind required parameters to query: ' . $dbQuery . ' , parameters :' . json_encode($arrayOfParemetersToBind);
else if (!$stmt->execute())
$errorOut = "Failed to execute query [$dbQuery] , erorr:" . $stmt->error;
else
{
if ($isDMQ)
$outValue = TRUE;
else
{
$result = $stmt->get_result();
if ($result === FALSE)
$errorOut = 'Failed to obtain result from statement for query ' . $dbQuery;
else
$outValue = $result->fetch_all(MYSQLI_ASSOC);
}
}
$stmt->close();
return $outValue;
}
использование:
$param1 = "128989";
$param2 = "some passcode";
$insertQuery = "INSERT INTO Cards (Serial, UserPin) VALUES (?, ?)";
$rowsInserted = ExecuteMySQLParametrizedQuery($dbConnection, $insertQuery, TRUE, 'ss', $errorOut, array(&$param1, &$param2) ); // Make sure the parameters in an array are passed by reference
if ($rowsInserted === NULL)
echo 'error ' . $errorOut;
else
echo "successfully inserted row";
$selectQuery = "SELECT CardID FROM Cards WHERE Serial like ? AND UserPin like ?";
$arrayOfCardIDs = ExecuteMySQLParametrizedQuery($dbConnection, $selectQuery, FALSE, 'ss', $errorOut, array(&$param1, &$param2) ); // Make sure the parameters in an array are passed by reference
if ($arrayOfCardIDs === NULL)
echo 'error ' . $errorOut;
else
{
echo 'obtained result array of ' . count($arrayOfCardIDs) . 'selected rows';
if (count($arrayOfCardIDs) > 0)
echo 'obtained card id = ' . $arrayOfCardIDs[0]['CardID'];
}
Вот несколько стихотворений:
<> !*''#
^"`$$-
!*=@$_
%*<> ~#4
&[]../
|{,,SYSTEM HALTED
Стихотворение можно оценить, только прочитав его вслух:
Waka waka bang splat tick tick hash,
Caret quote back-tick dollar dollar dash,
Bang splat equal at dollar under-score,
Percent splat waka waka tilde number four,
Ampersand bracket bracket dot dot slash,
Vertical-bar curly-bracket comma comma CRASH.
Источник: http://babek.info/libertybasicfiles/lbnews /nl123/fun.htm
Стремитесь к ясности и не используйте сленг, а используйте общепринятое название каждого символа. Таким образом,
. dot or period
! exclamation point
* asterisk or star
% percent (sometimes mod)
& ampersand
< less than
{ left brace
[ left bracket
; semicolon
Интеркальное справочное руководство является исчерпывающим руководством:
. spot identify 16-bit variable
: two-spot identify 32-bit variable
, tail identify 16-bit array
; hybrid identify 32-bit array
# mesh identify constant
= half-mesh
' spark grouper
` backspark
! wow equivalent to spark-spot
? what unary exlusive OR (ASCII)
" rabbit-ears grouper
". rabbit equivalent to ears-spot
| spike
% double-oh-seven percentage qualifier
- worm used with angles
< angle used with worms
> right angle
( wax precedes line label
) wane follows line label
[ U turn
] U turn back
{ embrace
} bracelet
* splat flags invalid statements
& ampersand[5] unary logical AND
V V unary logical OR
(or book)
V- bookworm unary exclusive OR
(or universal qualifier)
$ big money unary exclusive OR (ASCII)
c| change binary mingle
~ sqiggle binary select
_ flat worm
overline indicates "times 1000"
+ intersection separates list items
/ slat
\ backslat
@ whirlpool
-' hookworm
^ shark
(or simply sharkfin)
В дополнение к списку Тайлера МакГенри есть также запись Джеффа в блоге , которая ссылается на запись ASCII в The New Hacker's Словарь.
Обязательно найди те, которые больше приправлены британцами, мне нравится #! (читайте «хруст взрыва») как в CrunchBang Linux . И из-за чистой странности, мне нравится называть "#" "octothorpe".
Некоторые другие забавные, которые я слышал (мне было бы трудно найти их):
= "gets" (when reading C code "int num = 5;" would be "num gets five")
` "quasiquote" (lisp)
#! together are often pronounced "shebang" (consider that a kind of tech-dipthong)
@ в русском языке произносится «собака» (собака) (для визуального изображения).
Обратите внимание на эти дополнения:
! not
@ these (Perl)
$ this (Perl)
: otherwise (ternary operator)
; stop (read as a telegram?)
* anything (regex-esque)
& and
| or
Хехе, когда я был ребенком, я называл "#" - символ (не смейтесь!) "eh". А "$" называл "xsssss".