我正在尝试确定我的数据库中是否有电子邮件。为此,我写了这段代码:
$query_checkmail = "SELECT COUNT(*) FROM user WHERE email = ?;";
if($stmt = mysqli_prepare($connection, $query_checkmail))
{
mysqli_stmt_bind_param($stmt, "s", $_POST["email"]);
$result = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
echo "<pre>";
var_dump($result, mysqli_fetch_all($result));
echo "</pre>";
由于我希望查询返回0,因为电子邮件不应该在数据库中,因此输出为此(来自var_dump
):
bool(true)
NULL
我不明白为什么我没有得到值为0的mysqli结果对象,而是布尔值为true,如果我想检查它,它总是在日志中触发PHP警告。
之前我有一个正常的SELECT id FROM user WHERE email = ?;";
并得到了相同的结果。我想COUNT我可以防止这种情况,但我的尝试显然已经失败了。
我也发现了这个Stackoverflow Link,但不幸的是,它没有帮助我解决我的问题,即知道价值是否已经存在。
非常感谢任何帮助。如果这些信息不够,我会立即提供缺失的信息。
答案 0 :(得分:3)
计数本身不返回布尔值true或false,您正在检查从mysqli_stmt_execute()
分配的变量,该变量返回一个布尔值。这与查询结果无关。如果您将阅读有关此函数的文档,特别是mysqli_stmt_execute()
的返回值,您会看到它们是true
或false
,因此毫无疑问{ {1}}会返回一个布尔值。
如果您想要实际计数,则必须使用var_dump()
和mysqli_stmt_bind_result()
来获取计数结果。这将产生正确的结果。如果您不确定如何使用这些功能,那么这些手册将显示其中的示例。
对于mysqli_stmt_fetch()
,这是因为你将一个布尔值传递给mysqli_fetch_all()
函数,它需要一个mysqli_result,而你从上面提到的原因给它一个布尔值。 / p>
答案 1 :(得分:1)
mysqli_stmt_execute返回true或false,你应该在excute之后使用mysqli_stmt_get_result来检索数据
我从PHP.NET复制了示例代码
$result = mysqli_stmt_get_result($stmt);
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
{
foreach ($row as $r)
{
print "$r ";
}
print "\n";
}
答案 2 :(得分:0)
我建议您使用PDO而不是mysqli。首先建立连接,然后:
# Iris Dataset
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
%matplotlib inline
DF_data = pd.DataFrame(load_iris().data,
columns = load_iris().feature_names,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])])
Se_targets = pd.Series(load_iris().target,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
name = "Targets")
#Visualizing Iris Data
D_targets = {0: 'Iris-Setosa',
1: 'Iris-Versicolor',
2: 'Iris-Virgnica'}
D_features = {0: 'sepal length [cm]',
1: 'sepal width [cm]',
2: 'petal length [cm]',
3: 'petal width [cm]'}
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(8, 6))
idx_feature = 0
#Plot on 2 x 2 ax object
for i in range(ax.shape[0]):
for j in range(0, ax.shape[1]):
for idx_target, label_target in list(D_targets.items()):
sns.distplot(DF_data.as_matrix()[Se_targets==idx_target, idx_feature],
label=D_features[idx_feature],
kde=False,
bins=10,
ax=ax[i][j])
idx_feature += 1
plt.legend(loc='upper right', fancybox=True, fontsize=8)
plt.tight_layout()
plt.show()
答案 3 :(得分:0)
你可以使用MeekroDB,是完美的php-mysql库。例如,使用此代码行可以得到类似的结果:
$Pemeliharaan=new pemeliharaan;
$Pemeliharaan->id_pegawai=Request::input('id_petugas');
$Pemeliharaan->no_rek_pelanggan=Request::input('no_rek_pelanggan');
$Pemeliharaan->jenis=Request::input('jenis');
$Pemeliharaan->latitude=Request::input('latitude');
$Pemeliharaan->longitude=Request::input('longitude');
$Pemeliharaan->catatan=Request::input('catatan');
$success=$Pemeliharaan->save();
if(!$success)
{
return Response::json("error saving",500);
}
return Response::json("success",201);
如您所见,代码更清晰,更易于编写。 Meekro是免费的和开源的:http://meekro.com/quickstart.php