I’m trying use extract()
to create prefixed variables. However, the variable I expect is not being created, and I get an undefined variable warning.
Here’s my code:
<?php
$my_user_id = 1;
$stmt = $mysqli->prepare("SELECT id, email FROM users_index WHERE user_id=?");
$stmt->bind_param("i", $my_user_id);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();
if (!$row) {
echo "<p>There was no rows returned for your user session.</p>"; die;
}
extract($row, EXTR_PREFIX_ALL, 'sql_my_');
if (empty($sql_my_id)) {
echo "
<p>PHP Error: The variable is blank. row['id']={$row['id']} sql_my_id=$sql_my_id.</p>
<pre>";
print_r($row);
echo "</pre>";
die;
}
Output:
Warning: Undefined variable $sql_my_id in C:Apache24htdocswebsitetest.php
PHP Error: The variable is blank. row[‘id’]=1 sql_my_id=.
Array
(
[id] => 1
[email] => [email protected]
)
Problem:
I expected extract($row, EXTR_PREFIX_ALL, 'sql_my_')
to create $sql_my_id
and $sql_my_email
, but $sql_my_id
is not defined.
What I’ve tried:
- Using
EXTR_PREFIX_ALL
with a prefix. - Checking if
$row
is empty before extracting.
Why isn’t $sql_my_id
being created by extract()
? How can I correctly create prefixed variables from my associative array?